Older Version Newer Version

GerdIsenberg GerdIsenberg Jan 7, 2016

[[toc]]
**[[Home]] * [[Engines]] * Bobby**

**Bobby**,
a chess program by [[Hans-Joachim Kraas]] and [[Günther Schrüfer]], competing at various [[World Computer Chess Championship|World Computer]]- and [[World Microcomputer Chess Championship|World Microcomputer Chess Championships]] from 1983 until 1995 <ref>[[http://www.game-ai-forum.org/icga-tournaments/program.php?id=200|Bobby's ICGA Tournaments]]</ref> . Bobby had a strong [[WCCC 1986]] in [[http://en.wikipedia.org/wiki/Cologne|Cologne]], [[http://en.wikipedia.org/wiki/Germany|Germany]], defeating the later Champion [[Cray Blitz]] in round two, with some chances to tie first place until the last round loss against [[Jonathan Schaeffer|Schaeffer's]] [[Phoenix|Sun Phoenix]] <ref>[[Helmut Horacek]], (**1986**). //The Fifth World Computer Chess Championship Cologne, 1986//, Research Unit for Information Science and Artificial Intelligence, [[University of Hamburg]], from //**Kings move** Welcome to the 1989 AGT World Computer Chess Championship.// pg 21, available as [[http://archive.computerhistory.org/projects/chess/related_materials/text/3-1%20and%203-2%20and%203-3%20and%204-3.1989_WCCC/1989%20WCCC.062302028.sm.pdf|pdf reprint]] from [[The Computer History Museum]]</ref> . In 1993, Bobby II won the [[IPCCC 1993|3rd International Paderborn Computer Chess Championship]].

The development of Bobby started in 1982 as part of Kraas' and Schrüfer's MSc thesis. It was written entirely in [[Pascal]] on the [[IBM 370|IBM 4341-2]] <ref>[[http://www-03.ibm.com/ibm/history/reference/glossary_4.html|IBM Reference / Glossary]]</ref> of the [[http://en.wikipedia.org/wiki/Technical_University_of_Braunschweig|TU Braunschweig]]. In 1987 Bobby II was a complete redesign in [[C]] on a [[Atari ST]] microcomputer. A commercial successor of Bobby II is the program [[Doctor?]], market by [[ChessBase]] as 16-bit engine in 1995 as analysis engine for [[ChessBase (Database)|ChessBase/Windows 1.0]], and in 1998 as 32-bit add-on engine of the [[Fritz|Fritz 5.32]] package <ref>[[http://scleinzell.schachvereine.de/p_spielprogramme/fritz532.shtml|Fritz 5.32 - mehr als nur ein Update!]] by [[Peter Schreiner]] (German), [[http://scleinzell.schachvereine.de/home/news.shtml|Schachclub Leinzell]]</ref> <ref>[[http://www.schachversand.de/d/detail/software/76.html|Doctor? 2.0 / Engine MacIntosh]] from [[Schachversand Niggemann]]</ref>. According to //Das große Computerschachbuch//. <ref>[[http://www.rainerbartel.de/|Rainer Bartel]], [[Hans-Joachim Kraas]], [[Günther Schrüfer]] (**1985**). //Das große Computerschachbuch//. [[http://en.wikipedia.org/wiki/Data_Becker|Data Becker]], Düsseldorf, ISBN 3-89011-117-3 (German), from [[http://www.amazon.de/Das-gro%C3%9Fe-Computerschachbuch-Rainer-Bartel/dp/3890111173|amazon.de]]</ref> , Bobby had a sophisticated [[Evaluation|evaluation]], with respect to [[King Safety|king safety]] and [[Passed Pawn|passed pawns]]. Bobby's search was a STC-Search (solution tree cost oriented search) <ref>[[http://www.ajedrez-de-estilo.com.ar/int/Products/engines/doctor/index.htm|Doctor? by Dr. Hans-Joachim Kraas and Dr. Gunther Schrüfer]]</ref> , as elaborated in Schrüfer's 1988 PhD thesis <ref>[[Günther Schrüfer]] (**1988**). //[[http://www.worldcat.org/oclc/246856479&referer=brief_results|Minimax-Suchen : Kosten, Qualität und Algorithmen]]//. Braunschweig : Technische Universität. (German)</ref> 

=Photos & Games= 
==Mephisto==
|| [[image:SchrueferKraasWeinerLang1986.JPG width="582" height="398"]] ||
|| [[Günther Schrüfer]], [[Hans-Joachim Kraas]], [[Ossi Weiner]] and [[Richard Lang]] <ref>[[László Lindner]], A SZÁMÍTÓGÉPES SAKK KÉPEKBEN című melléklete - The pictures of the Beginning of Chess Computers</ref>  ||
[[WCCC 1986]], round 4, [[Bobby]] - [[Mephisto|Mephisto X]] <ref>[[http://www.game-ai-forum.org/icga-tournaments/round.php?tournament=62&round=4&id=4|Cologne 1986, Chess, Round 4, Game 4]]</ref> 
[[code]]
[Event "WCCC 1986"]
[Site "Cologne, Germany"]
[Date "1986.06.14"]
[Round "4"]
[White "Bobby"]
[Black "Mephisto X"]
[Result "1-0"]

1. e4 Nf6 2. e5 Nd5 3. d4 d6 4. c4 Nb6 5. exd6 exd6 6. Nc3 Be7 7. h3 O-O 
8. Nf3 Nc6 9. Be2 Bf5 10. O-O Qd7 11. Bf4 Rae8 12. a4 Bf6 13. a5 Nc8 14. a6 
b6 15. g4 Bxg4 16. hxg4 Qxg4+ 17. Bg3 Nxd4 18. Nxd4 Qxd4 19. Qc2 h6 20. Rfd1 
Qc5 21. Nb5 Be5 22. Rd5 Qc6 23. Bxe5 Rxe5 24. Rxe5 dxe5 25. Bg4 Nd6 26. Nxa7 
Qc5 27. Bd7 e4 28. Nb5 Nxb5 29. Bxb5 Qg5+ 30. Kf1 Qh4 31. Rd1 Qh1+ 32. Ke2 
Qf3+ 33. Ke1 Qh1+ 34. Kd2 Qg2 35. Kc1 Qg6 36. Qb3 c6 37. Ba4 c5 38. Qg3 Ra8
39. Qxg6 fxg6 40. Bb5 g5 41. Rd7 h5 42. a7 e3 43. fxe3 Rf8 44. Bc6 h4 
45. a8=Q Rxa8 46. Bxa8 h3 47. Rd5 1-0
[[code]]

==Sun Phoenix==
|| [[image:WCCC1986R5Hort.JPG width="588" link="http://home.scarlet.be/vincentlejeune/jeux-et-strategie-040-1986-08-09-page007.jpg"]] ||
|| [[WCCC 1986]], round 5, [[http://en.wikipedia.org/wiki/Vlastimil_Hort|Vlastimil Hort]], [[Frans Morsch]], [[Hans van der Zijden]], [[Hans-Joachim Kraas]] <ref>Image from [[Pierre Nolot]] (**1986**). //Echecs: Les Progès des Programmes//. [[http://fr.wikipedia.org/wiki/Jeux_et_Strat%C3%A9gie|Jeux et Stratégie]]</ref> ||
[[WCCC 1986]], round 5, [[Bobby]] - [[Phoenix|Sun Phoenix]] 
[[code]]
[Event "WCCC 1986"]
[Site "Cologne, Germany"]
[Date "1986.06.15"]
[Round "5"]
[White "Bobby"]
[Black "Sun Phoenix"]
[Result "0-1"]

1. e4 e6 2. b3 d5 3. Bb2 dxe4 4. Nc3 Nf6 5. Qe2 Be7 6. O-O-O Qd4 7. Re1 O-O 
8. Nxe4 Qxe4 9. Qxe4 Nxe4 10. Rxe4 Nd7 11. Nf3 Bc5 12. d4 Nf6 13. Rh4 Be7 
14. Kb1 e5 15. h3 e4 16. Ne5 Be6 17. Bc4 Bxc4 18. bxc4 c5 19. d5 e3 20. Rf4 
exf2 21. Rxf2 Ne4 22. Rf4 Nd2+ 23. Ka1 Bd6 24. Re1 Rae8 25. Re2 f5 26. Rh4 Ne4 
27. Nd3 Re7 28. Re3 g6 29. Nc1 Rfe8 30. a4 h5 31. Nb3 Kh7 32. Na5 Kh6 33. Rf3 
Ng3 34. Rb3 b6 35. Nc6 Re1+ 36. Ka2 g5 37. Nxa7 Ra8 38. Nb5 Rxa4+ 39. Ba3 Be5 
40. Nd4 0-1
[[code]]
[[#StrategicQuiescenceSearch]]
=Strategic Quiescence Search=
Bobby applied a so called //Strategic Quiescence Search// as described in a 1989 [[ICGA Journal|ICCA Journal]] paper by [[Günther Schrüfer]] <ref>[[Günther Schrüfer]] (**1989**). //A Strategic Quiescence Search//. [[ICGA Journal|ICCA Journal]], Vol. 12, No. 1, pp. 3-9</ref>. Schrüfer claimed the inclusion of certain [[Quiet Moves|none tactical moves]] in [[Quiescence Search|quiescence search]] an improvement over a pure tactical search in Bobby. He also stated, for some programs it might be a significant speed penalty in the number of [[Nodes per second|moves searched per second]] to do so, i.e. in [[Move Generation|generating]] quiet moves. In Bobby this was irrelevant, since many of the values required have been precomputed for each node in any case. Beside the standard [[Quiescence Search#StandPat|standing pat]] [[Pruning|forward pruning]] conditions FP1 and FP2, all successors, not only [[Captures|captures]], [[Promotions|promotions]] and [[Check|checks]], were tested versus the forward pruning condition FP3.

==Pseudo Code==
[[code format="cpp"]]
int StategicQS(CNode n, int α, int ß) {
   int bestval = eval(n);
   if ( bestval >= ß ) return bestval;   // FP1, fail soft
   if ( bestval >  α ) α = bestval;      // FP2
   for all n´€ SUCC(n) do {              // search loop
      if ( evalPlus(n´) > α ) {          // FP3
         int actval = -StategicQS(n´, -ß, -α);
         if ( actval > bestval ) {
            bestval = actval;
            if ( bestval >= ß ) return bestval;
            if ( bestval >  α ) α = bestval;
         }
      }
      else if ( evalPlus(n´) > bestval ) bestval = evalPlus(n´);
   }
   return bestval;
}
[[code]]

==Eval+==
The //evalPlus// value is +oo in case of checking moves near the horizon, but scaled to zero for deeper searches to avoid "infinite" checks and [[Search Explosion|search explosion]]. Otherwise //evalPlus// is [[Incremental Updates|incrementally calculated]] by eval(n) and [[Moves|move]] properties. In case of [[Tactical Moves|tactical moves]], the sum of eval(n) and the value of a captured and/or promoted piece and a constant representing half the value of a Pawn is taken. For [[Quiet Moves|quiet]] or strategical moves, evalPlus relies on maximum [[Score|score]] differences of two consecutive evaluations n´ and n, triggered by [[History Heuristic|history success counters]]: 
[[code format="cpp"]]
if ( isCheck ) 
   return infiniteIfNearBelowHorizon(depth);
if ( isCapture && isPromotion ) 
   return eval(n) - VALUE_PAWN/2 + Value(captured piece) + Value(promoted piece);
if ( isCapture )
   return eval(n) + VALUE_PAWN/2 + Value(captured piece);
if ( isPromotion )
   return eval(n) - VALUE_PAWN/2 + Value(promoted piece);
return eval(n) + hist[from][to].diff;
[[code]]

==History Update==
Positive history based success counters are associated with the maximum difference of two consecutive evaluations n´ and n found so far, while zero saturated counters also have zero difference and are therefor always pruned by FP3. Following scheme is used to update the [[Butterfly Boards|butterfly boards]]:
[[code format="cpp"]]
   for all n´€ SUCC(n) do {
      int actval = -search(n´, -ß, -α);
      ...
      if ( none tactical ) {
         // History update by quiet move n -> n´
         if ( eval(n´) > eval(n) && actval > eval(n) ) {
            hist[from][to].success += 10;
            if ( eval(n´) - eval(n) > hist[from][to].diff )
               hist[from][to].diff = eval(n´) - eval(n);
         }
         else if ( entry.success > 0 ) {
            hist[from][to].success--;
            if ( hist[from][to].success == 0 ) hist[from][to].diff = 0;
         }
      }
      ...
   }
[[code]]
=See also=
* [[Various Classifications#ChessLegend|Chess legends]]
* [[Fischerle]]

=Publications=
* [[http://www.rainerbartel.de/|Rainer Bartel]], [[Hans-Joachim Kraas]], [[Günther Schrüfer]] (**1985**). //Das große Computerschachbuch//. [[http://en.wikipedia.org/wiki/Data_Becker|Data Becker]], Düsseldorf, ISBN 3-89011-117-3 (German), from [[http://www.amazon.de/Das-gro%C3%9Fe-Computerschachbuch-Rainer-Bartel/dp/3890111173|amazon.de]]
* [[Günther Schrüfer]] (**1988**). //[[http://www.worldcat.org/oclc/246856479&referer=brief_results|Minimax-Suchen : Kosten, Qualität und Algorithmen]]//. Braunschweig : Technische Universität. (German) 
* [[Günther Schrüfer]] (**1989**). //A Strategic Quiescence Search//. [[ICGA Journal|ICCA Journal]], Vol. 12, No. 1, pp. 3-9.

=External Links= 
* [[http://www.game-ai-forum.org/icga-tournaments/program.php?id=200|Bobby's ICGA Tournaments]]
* [[http://en.wikipedia.org/wiki/Bobby|Bobby (disambiguation page) from Wikipedia]]
* [[http://en.wikipedia.org/wiki/Bobby_Fischer|Bobby Fischer from Wikipedia]]

=References= 
<references />
=What links here?= 
[[include page="Bobby" component="backlinks" limit="60" ]]
**[[Engines|Up one Level]]**