Junior is a leading Israeli chess playing PC program. It was developed as a hobby by Amir Ban and Shay Bushinsky. Junior's breakthrough occurred during August 1994: The program scored a remarkable equal fourth place (with GM Alon Greenfeld) in the Kfar-Saba Open national chess tournament. The games were conducted under normal tournament time control. In the final round, Junior amazingly defeated GM Leonid Gopstein. During November 1994, Junior participated in the strongest international blitz tournament ever held in Israel. It beat GM Ilya Smirin and drew with GM Lev Psakhis and GM Alon Greenfeld. Amongst others, Junior reached a completely won position against GM Judit Polgar. Since then Junior has established itself as a well respected player in the Israeli chess scene and is the one and only software selected to play in Israel's national chess league. Junior is one of the top chess playing programs on the Internet Chess Server.
Program Internals
Amir started chess programming in 1985 - Junior's predecessor was written in Turbo Pascal, later ported to C and C++. In 1993, Shay joins Amir's programming efforts, specializing in evaluation and optimisation [10] .
Junior is written entirely in C++ (Borland). The entire search engine is the implementation of class 'Position'. One statement that cannot be said about Junior is that it is slow. I've heard these kinds of performance arguments about C++ several times in the past. As a C++ veteran in many projects, I'm quite mystified about what is supposed to be slow about the language.
Creating a new Position and detroying it for every node is indeed the classic OOP approach, and also exactly what my program does. Your assumption that this involves "malloc" (or "new) is the incorrect one. mallocing a Position whenever you need one is as unnecesary and silly as mallocing an int every time you want to do a loop. You should malloc something when you want it to have dynamic lifetime and/or scope.
You can create an object as you create an int, by putting it as an auto variable on the stack, e.g.:
alphabeta(...){
...
Position newPosition;
...
}
This constructs a Position at the point of declaration and destroys it on the exit from the block. The constructor and destructor do exactly what you code in them of course. No more, no less. The overhead for this is not low. It's zero.
The brute-forceplydepth is indeed half the publicized depth. All the rest are extensions (in conventional terminology, I don't think of them this way). If you set Junior to depth 12, e.g., then you should be able to find a 7-ply combination where it fails. If I am doing a good job, then you should have a hard time finding one.
The question of what this is equivalent to in terms of other programs, e.g. a null-mover with "standard" extensions is interesting, but I don't know the answer. In tournament conditions middlegame Junior typically gets 14-16 depths, and it looks competitive tactically.
The Junior depth value measures half-plies, so if you insist, it's ply 6. I could have called it ply 12 or ply 9 with equal justification. Since nobody does brute-force anymore, and everybody does both pruning and extensions, what the depth indicator means is a bit vague. Very roughly, I would propose this equality:
Razoring is supposed to be a sort of forward pruning where rather than skipping an entire subtree, you search it to a reduced depth, typically one less than normal depth. The advantage is that you get most of the saving but with much lower risk than pruning entire subtrees. Razoring is the only forward pruning technique Junior uses, with a depth reduction of one (half-ply). Seems like Crafty uses the same definition ...
Table of Contents
Junior, (Deep Junior)
a chess engine by primary programmer Amir Ban and Shay Bushinsky. Junior is six times winner of the Shannon Trophy from WCCC 2002, WCCC 2004 [1] , WCCC 2006, WCCC 2009 (shared), WCCC 2011 [2] and WCCC 2013, and two times winner of the World Microcomputer Chess Championship, the WMCCC 1997 and WMCCC 2001 respectively, and thus most successful program ever. Book authors are Alon Greenfeld and Boris Alterman. In 2003, the multiprocessor version Deep Junior played a 6-game match against Garry Kasparov that resulted in a 3-3 tie. Junior is known for its entertaining, dynamic and sometimes speculative playing style [3] [4] . Until version 10.0 market as ChessBase engine in conjunction with the Fritz GUI [5] , Deep Junior 13 as pure UCI compatible engine is purchased as download product from the Hiarcs site [6] , and requires a Windows PC and an external GUI supporting the UCI protocol.
Photos & Games
[7]WCCC 2006 Round 4
WCCC 2006 Shannon Trophy
Description
given in 1995 from the ICGA page [9] :Program Internals
Amir started chess programming in 1985 - Junior's predecessor was written in Turbo Pascal, later ported to C and C++. In 1993, Shay joins Amir's programming efforts, specializing in evaluation and optimisation [10] .C++
Amir Ban in rgcc, June 1997 [11] [12] :Creating a new Position and detroying it for every node is indeed the classic OOP approach, and also exactly what my program does. Your assumption that this involves "malloc" (or "new) is the incorrect one. mallocing a Position whenever you need one is as unnecesary and silly as mallocing an int every time you want to do a loop. You should malloc something when you want it to have dynamic lifetime and/or scope.
You can create an object as you create an int, by putting it as an auto variable on the stack, e.g.:
Search Depth
Amir Ban in rgcc, March 1998 [13] :The question of what this is equivalent to in terms of other programs, e.g. a null-mover with "standard" extensions is interesting, but I don't know the answer. In tournament conditions middlegame Junior typically gets 14-16 depths, and it looks competitive tactically.
Amir Ban in CCC, April 1998 [14] ;
- Genius depth 6 = Rebel depth 8 = Fritz5 depth 10 = Junior depth 12
which once said should be forgotten, since it's much more complicated than that.Razoring
Amir Ban in a CCC discussion with Robert Hyatt on Razoring versus Pruning, January 1999 [15] :Release Dates
Matches
Publications
Forum Posts
1995 ...
2000 ...
2010 ...
External Links
Purchase
Reports
Misc
feat. Giovanni Tommaso, Franco D'Andrea, Gato Barbieri, Franco Ambrosetti
References
What links here?
Up one level