
Latest Djinn changes since version 0.884b
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

E - Evaluation change
S - Alteration to the search
I - Interface change (a command was added, deleted etc.)
B - Bug fix
O - Optimization

 18-MAR-06 (Ver. 0.920)
 ----------------------
 E  o Revived (and optimized) the "dangerous pawns on the 6th" code.
      The program was missing too many situations where the two 
      connected passed pawns were stronger than the rook or knight.
      This code isn't 100% correct, but it's damn close!
 B  o Corrected a bug in the way passed pawns were scored.  Occasionally,
      if two pawns were doubled and the front pawn was passed, the engine
      would also evaluate the back pawn as passed, which is incorrect.
 B  o Caught a *major* bug in the KPK internal-node recognizer code.  
      The value returned from the KPK recoginizer was not being 
      negated if black had the right to move (very bad!).  This was
      actually costing the engine a fair number of endgame points.

 12-MAR-06
 ---------
 S  o Changed the extension for pawn pushes to the 6th and 7th to 3/4 of
      a ply instead of 1/2.  This helped the program's pawn endgame a bit.
 O  o Added the "auto-generated" attack functions back in.  This resulted
      in an approximate speed up of about 5%.

 09-MAR-06
 ---------
 S  o The engine now restricts all null move searches until we are at
      least 3 ply deep into the tree.  This helps the program avoid
      
      Qxe3+ in this position 

      8/8/1Q6/4kp2/P4p1P/4r3/8/6K1 w - - 0 1
      
      or Bxg5 in this position 

      4rbk1/pb5p/1p1r1p2/5PpN/1P2q3/4B3/PQ4PP/1R1R2K1 w - - 0 16
 
 S  o Additional tweaks to the late-move reduction criteria.  Removed the
      influence of the history table, so the best name *really* is 
      "late-move" and not "history" reductions (at least for Djinn)! ;-)
      Also the engine now uses a form of "adaptive" late-move reductions,
      which seems to give it an extra half-ply of search depth, with no
      real downside (at least so far).
 S  o Threw out the "recapture" extension.  This helps in test suites, but
      in my testing doesn't add anything to actual game results.
 E  o Tweaks to the pawn piecetables (nothing major, just a few changes
      to encourage the program to favor duos over lone adventuring pawns).

 05-MAR-06
 ---------
 S  o Additional late-move reductions.  The program pays far more attention
      now to the Knuth node type, essentially using this information to 
      decide on wheter a late move reduction is warranted, (this 
      modification was added after a discussion with Daniel Shawul on the
      Winboard forum).  Also a modification to the way extensions are 
      scaled back, if the side moving has a huge material advantage the
      extensions are less aggresive. 
 B  o Fixed a couple of minor bugs in the way test results were reported,
      having to do with integer versus floating point conversion. 

 11-FEB-06
 ---------
 S  o Modified (i.e. simplified) the times that the engine will 
      generate checks in the qsearch.  Eliminated the "always_in_check"
      variable since it was redundant after the refactoring.

 04-FEB-06
 ---------
 S  o Modified the futility pruning in the qsearch so that the margin
      was slightly larger for pruning captures (I modified this based
      on scaffolding code that measured the effectiveness of various
      margins).

 21-JAN-06
 ---------
 S  o Restructed the search in both the main tree and the qsearch to
      be a "pure" PVS search.
 E  o A plethora of king-safety tweaks (and some simplification of the
      code since it was becoming overally messy).

 29-DEC-05
 ---------
 S  o Restored the internal-iterative deepening, but it is heavily
      restricted based on the node type.  It is only performed at
      PV nodes when we don't have a hash move.

 26-DEC-05
 ---------
 B  o Caught a rather subtle bug in the way the draft was being calculated
      in the quiescent search.  Previously, "-qdepth*ONE_PLY" was being
      used as the draft for the qsearch.  Now "ply" is passed to the
      qsearch as well as the regular search and decremented each time
      by "ONE_PLY".  This fixed an inconsistency at the horizon between
      the null-search and the quiescence search.
 E  o Modified the middlegame piece table for the knights so that the 
      absolute mobility for the knight is folded into each square.

 21-DEC-05
 ---------
 S  o Added additional CHANT enhancements to help optimize the search.

 13-DEC-05
 ---------
 B  o Found a bug in the king safety "Shelter" array.
 E  o Isolani are now scored using an array with 64 values instead
      of the 8 entry scaling array previously used.

 12-DEC-05
 ---------
 S  o Now killers from the two plies up in the tree are used if they
      apply to the current position.
 S  o If the program detects that it is in check it now generates only
      valid check replies first (this used to come after the hash phase
      and killer mate phases).  The hash move (if applicable) is still
      sorted to the top. 

 07-DEC-05
 ---------
 S  o Changed the way the history tables are scaled back.  After adding
      search scaffolding code to measure the different schemes, I decide
      simpler was better (i.e. faster) so the scheme was simplified.

 06-DEC-05
 ---------
 S  o Modified the insertion sort routine so that it is now a "stable" sort.
      This means that the order of duplicate values are preserved, which is
      important when the list is being sorted in multiple passes.
 S  o Modified the way the history heuristic sort routine operates (say 
      *that* five times fast)!

 21-SEP-05
 ---------
 S  o Added Knuth-type node classification.  I decided to revisit the 
      whole search issue and give Djinn a search based on sound theoretical
      foundations--this is the main pillar of that foundation.
 S  o Added a form of the Botvinnik-Markoff extension--slightly different
      then what Sergi Markoff described.
 S  o Removed the internal-iterative deepening.  This will go back in
      eventually, but *only* when I deem it truly effective.

 12-SEP-05
 ---------
 B  o Fixed an out-of-bounds array access in the main search that would
      only show up in very disparate material situations.  This was 
      caught when I ran the engine in full debug mode.

 11-SEP-05
 ---------
 I  o To make them easier to remember and understand, I changed the 
      "flip/flop/flip-flop" commands to... 

        flip-tb   : Mirror the board top-to-bottom (A1=A8, A2=A7, etc.)
        flip-lr   : Mirror the board left-to-right (A1=H8, B1=G1, etc.)
        flip-tblr : Perform, in succession, both of the above commands 

      You know it's time to make an interface change when *you* have to
      start looking the syntax of your own commands up in the documentation.
 
 B  o Caught a bug in the evalution hash code (again, I ask--how does 
      this thing *EVER* play a legal move?? ;-)
 E  o Modified the "eval-test" routine so that it checks the castling code.
      This is problematic because the castling rights get modified when 
      the board is flip and mirrored.  The solution is to artifically set
      the castling bonus and check the results in a consistent way.
 B  o Caught a minor bug in the way the king positions were being score in
      a sparse piece endgame.
 B  o Corrected a bug in the "rule-of-the-square" code.

 02-SEP-05
 ---------
 O  o Altered the Win32 versions of "findlsb" and "findmsb", so that they
      are more in line with the Linux versions used with gcc.  This also
      had the ancillary effect of speeding the Windows version up by 
      roughly 8% (which is good of course)! 

