stockfish
6 years agoAdd bonuses for Minors attacking enemy pieces(except pawns) even when they are protec...
Ajith [Mon, 30 Jun 2014 14:55:10 +0000 (10:55 -0400)]
Add bonuses for Minors attacking enemy pieces(except pawns) even when they are protected by enemy pawns.

Patch passed STC
LLR: 2.95 (-2.94,2.94) [-1.50,4.50]
Total: 8206 W: 1426 L: 1304 D: 5476

and LTC
LLR: 2.97 (-2.94,2.94) [0.00,6.00]
Total: 19534 W: 2821 L: 2640 D: 14073

Bench: 9942172

6 years agoFix Singular extension condition to handle mate scores
joergoster [Sun, 29 Jun 2014 19:17:40 +0000 (20:17 +0100)]
Fix Singular extension condition to handle mate scores

With Eelco's patch "Don't special case for abs(beta) >= VALUE_MATE_IN_MAX_PLY" condition "abs(ttValue) < VALUE_KNOWN_WIN" has been removed from singular extension search, and condition "abs(beta) < VALUE_KNOWN_WIN" was added to the SingularExtensionNode definition.
This might lead to problems, especially in positions, where a mate is due.
For example, this position 5rk1/4K1pp/8/5PPP/8/8/8/1R6 w - - 12 1 triggers an assert.
stockfish: search.cpp:434: Value {anonymous}::search(Position&, Search::Stack*, Value, Value, Depth, bool) [with {anonymous}::NodeType NT = (<unnamed>::NodeType)2u; bool SpNode = false]: Assertion `-VALUE_INFINITE <= alpha && alpha < beta && beta <= VALUE_INFINITE' failed.

So let's re-insert the removed condition.
First spotted by Uri Blass, fix by me.

Bench: 8759675

6 years agoChange the install prefix for Haiku
Joseph R. Prostko [Sun, 29 Jun 2014 14:15:10 +0000 (15:15 +0100)]
Change the install prefix for Haiku

* /boot/common was removed from Haiku
* The equivalent path now that package management has been implemented is /boot/system/non-packaged

No functional change

Bench: 8759681

6 years agoPack 3 TT entries in 32 bytes cluster
Ron Britvich [Sat, 28 Jun 2014 18:05:58 +0000 (14:05 -0400)]
Pack 3 TT entries in 32 bytes cluster

Idea from Ron Britvich

Code reworked by Marco Costalba and Joona Kiiski

Bench: 8095369

Resolves #3
Resolves #10

6 years agoMerge pull request #9 from glinscott/pawnspan
Gary Linscott [Thu, 26 Jun 2014 19:21:06 +0000 (12:21 -0700)]
Merge pull request #9 from glinscott/pawnspan

Scale down endgames with pawns on one or two adjacent files

Passed STC
LLR: 2.95 (-2.94,2.94) [-1.50,4.50]
Total: 16081 W: 2745 L: 2604 D: 10732

Passed LTC
LLR: 2.95 (-2.94,2.94) [1.00,6.00]
Total: 123832 W: 17292 L: 16584 D: 89956

128k games to measure ELO at 15+0.05:
ELO: 2.07 +-1.1 (95%) LOS: 100.0%
Total: 128000 W: 21632 L: 20869 D: 85499

New bench: 8028792

6 years agoA bit more cleanup
Gary Linscott [Thu, 26 Jun 2014 19:20:30 +0000 (15:20 -0400)]
A bit more cleanup

6 years agoMerge pull request #8 from glinscott/revert_ce1c260
Gary Linscott [Thu, 26 Jun 2014 15:20:45 +0000 (08:20 -0700)]
Merge pull request #8 from glinscott/revert_ce1c260

Revert "Check for an available slave early on"

6 years agoRevert "Check for an available slave early on"
Gary Linscott [Thu, 26 Jun 2014 15:16:36 +0000 (11:16 -0400)]
Revert "Check for an available slave early on"

This reverts commit ce1c260ea97c14eea996d0a2638f4876ccbc412b.

6 years agoOriginal version of shane's patch
Gary Linscott [Wed, 25 Jun 2014 20:45:14 +0000 (16:45 -0400)]
Original version of shane's patch

6 years agoScale down endgames with pawns on one or two adjacent files
shane31 [Wed, 25 Jun 2014 20:01:00 +0000 (16:01 -0400)]
Scale down endgames with pawns on one or two adjacent files

6 years agoMerge pull request #5 from glinscott/authors
Gary Linscott [Mon, 23 Jun 2014 16:14:03 +0000 (09:14 -0700)]
Merge pull request #5 from glinscott/authors

Add AUTHORS

6 years agoSome reformatting in pawns.cpp
Marco Costalba [Sat, 21 Jun 2014 12:32:11 +0000 (14:32 +0200)]
Some reformatting in pawns.cpp

No functional change.

6 years agoEnsure ttValue != VALUE_NONE in singular extension search
Marco Costalba [Sat, 21 Jun 2014 11:07:29 +0000 (13:07 +0200)]
Ensure ttValue != VALUE_NONE in singular extension search

The assert:

  assert(ttValue != VALUE_NONE);

Could fire for multiple reasons (although is very rare),
for instance after an IID we can have ttMove != MOVE_NONE
while ttValue is still set at VALUE_NONE.

But not only this, actually SMP is a source of corrupted
ttValue and anyhow we can detect the condition:

 ttMove != MOVE_NONE && ttValue == VALUE_NONE

even north of IID.

Reported by Ronald de Man.

It is so rare that bench didn't change.

bench: 7710548

6 years agoRemove some duplicates
Gary Linscott [Sat, 21 Jun 2014 04:49:49 +0000 (00:49 -0400)]
Remove some duplicates

6 years agoAdd AUTHORS
Gary Linscott [Sat, 21 Jun 2014 01:35:09 +0000 (21:35 -0400)]
Add AUTHORS

6 years agoBetter value clipping in game_phase()
Marco Costalba [Fri, 20 Jun 2014 22:02:43 +0000 (00:02 +0200)]
Better value clipping in game_phase()

No functional change.

6 years agoMove game_phase() to Position
Marco Costalba [Fri, 20 Jun 2014 21:40:36 +0000 (23:40 +0200)]
Move game_phase() to Position

It seems a more natural to place this
function there.

No functional change.

6 years agoSmall renaming in material weights
Marco Costalba [Fri, 20 Jun 2014 21:15:31 +0000 (23:15 +0200)]
Small renaming in material weights

Also dropped some temporary variable: compiler
is more than able to push on stack temp values
by itself (verified).

No functional change.

6 years agoSimplify a condition in is_KXK()
Marco Costalba [Thu, 19 Jun 2014 13:44:42 +0000 (15:44 +0200)]
Simplify a condition in is_KXK()

No functional change.

6 years agoDon't special case for abs(beta) >= VALUE_MATE_IN_MAX_PLY
Eelco de Groot [Mon, 16 Jun 2014 19:46:42 +0000 (21:46 +0200)]
Don't special case for abs(beta) >= VALUE_MATE_IN_MAX_PLY

Remove from the search this special case and apply
null search and razoring also in mate positions.

Tested in no-regression mode and passed both

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 65431 W: 10860 L: 10810 D: 43761

and LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 34928 W: 4814 L: 4713 D: 25401

This patch kicks in only in mate positions and in
these cases it seems beneficial in finding mates
faster as Yery Spark measured on the Chest mate suite:

Total number of positions 6425
Fixed nodes 200K per position

master: 1049
new:    1154

And also the 5446 'hard' positions again with 2000K nodes
(those not found by both engines in 200K nodes):

master: 1069
new:    1395

bench: 7710548

6 years agoSimplify unstoppable pawns
Leonid Pechenik [Mon, 16 Jun 2014 10:32:11 +0000 (12:32 +0200)]
Simplify unstoppable pawns

Tested in no-regression mode and passed both

STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 17919 W: 3103 L: 2978 D: 11838

and LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 31460 W: 4414 L: 4308 D: 22738

bench: 7709279

6 years agoRemove -ansi flag for Clang
Marco Costalba [Sun, 15 Jun 2014 08:29:53 +0000 (10:29 +0200)]
Remove -ansi flag for Clang

It seems this flag is only for gcc and
yields a warning under OSX Mavericks:

clang: warning: argument unused during compilation: '-ansi'

No functional change.

6 years agoFix a warning with MSVC in 'analyze' mode
Marco Costalba [Sat, 14 Jun 2014 10:46:58 +0000 (12:46 +0200)]
Fix a warning with MSVC in 'analyze' mode

Here MSVC is worried that

StepAttacksBB[PAWN][psq]

could overflow, so change psq initialization
to clarify psq is always less than 64.

No functional change.

6 years agoTriviality in UCI::loop
Marco Costalba [Sat, 14 Jun 2014 10:26:08 +0000 (12:26 +0200)]
Triviality in UCI::loop

Code style paranoid in action here :-)

No functional change.

6 years agoFactor out pawn attacks in 'lever'
Marco Costalba [Sat, 14 Jun 2014 10:16:22 +0000 (12:16 +0200)]
Factor out pawn attacks in 'lever'

Improves readibility and possibly speed.

No functional change.

6 years agoSimplify pawn threats and merge into ThreatenedByPawn[]
Ajith [Wed, 11 Jun 2014 23:31:33 +0000 (08:31 +0900)]
Simplify pawn threats and merge into ThreatenedByPawn[]

Tested in no-regression mode,

passed STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 14477 W: 2493 L: 2362 D: 9622

and LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 51964 W: 7091 L: 7013 D: 37860

bench: 7875814

6 years agoTweak outpost name
Reuven Peleg [Mon, 9 Jun 2014 10:45:56 +0000 (13:45 +0300)]
Tweak outpost name

This name is more accurate, since that function evaluates only one
outpost in every call.
No functional change.

6 years agoAdd bonus for advanced lever
Reuven Peleg [Wed, 11 Jun 2014 14:36:46 +0000 (23:36 +0900)]
Add bonus for advanced lever

Passed both STC
LLR: 2.95 (-2.94,2.94) [-1.50,4.50]
Total: 15413 W: 2670 L: 2530 D: 10213

And LTC:
LLR: 2.95 (-2.94,2.94) [1.00,6.00]
Total: 66908 W: 9398 L: 8960 D: 48550

Bench : 7859385

6 years agoSmall renaming in Tracing
Marco Costalba [Sun, 8 Jun 2014 20:30:18 +0000 (05:30 +0900)]
Small renaming in Tracing

No functional change.

6 years agoCheck for an available slave early on
Marco Costalba [Sun, 8 Jun 2014 19:56:31 +0000 (04:56 +0900)]
Check for an available slave early on

Don't take the split lock if we don't have
available slaves (about 30-40% of times).

This new condition allows to retire the now
redundant one on number of threads.

No functional change.

6 years agoUse unsigned char as argument of std::isspace
Marco Costalba [Fri, 6 Jun 2014 23:16:31 +0000 (01:16 +0200)]
Use unsigned char as argument of std::isspace

Although signature allows an int:

int isspace( int ch );

The behavior is undefined if the value of ch is
not representable as unsigned char and is not
equal to EOF.

See

http://en.cppreference.com/w/cpp/string/byte/isspace
http://www.greenend.org.uk/rjk/tech/cfu.html

This is really a tricky corner case of C standard!

Spotted and reported by Ron Britvich.

No functional change.

6 years agoAvoid to use nullChild
Marco Costalba [Fri, 6 Jun 2014 09:12:05 +0000 (11:12 +0200)]
Avoid to use nullChild

Use instead:

(ss-1)->currentMove == MOVE_NULL

No functional change.

6 years agoRemove 'update gains' hack
Marco Costalba [Fri, 6 Jun 2014 09:10:40 +0000 (11:10 +0200)]
Remove 'update gains' hack

Use (move != MOVE_NONE) condition to
filtering out updating gains at root.

bench: 8454456

6 years agoTemporary revert previous patch
Marco Costalba [Fri, 6 Jun 2014 09:07:12 +0000 (11:07 +0200)]
Temporary revert previous patch

Split previous patch in 2 steps: first remove
the MOVE_NULL hack, then retire nullChild.

The first step is a prerequisite
for second one and affects bench.

The second step (next patch) just removes nullChild
without affecting bench.

bench: 8205159

6 years agoAvoid to use nullChild
Marco Costalba [Fri, 6 Jun 2014 07:58:00 +0000 (09:58 +0200)]
Avoid to use nullChild

Should be a non functional change, but
for some reason bench is changed.

bench: 8454456

6 years agoMove Tempo to evaluation
Marco Costalba [Fri, 6 Jun 2014 07:35:34 +0000 (09:35 +0200)]
Move Tempo to evaluation

No functional change.

6 years agoRevert "Score extractors"
Marco Costalba [Thu, 5 Jun 2014 21:55:18 +0000 (23:55 +0200)]
Revert "Score extractors"

Are broken for big-endian case and
I have verified with MSVC 2013 Premium
bench is correct and there is no
miscompilation, so the main reason
to change the original code drops.

No functional change.

6 years agoFix a warning with MSVC Premium 2013
Marco Costalba [Thu, 5 Jun 2014 21:46:58 +0000 (23:46 +0200)]
Fix a warning with MSVC Premium 2013

Reported by Ron Britvich.

No functional change.

6 years agoUpdate Readme.md
pellanda [Wed, 4 Jun 2014 13:56:34 +0000 (10:56 -0300)]
Update Readme.md

Retire line about polyglot.ini and
book as they are not used anymore.

No functional change.

6 years agoSymmetric King Safety: take 2
Lucas Braesch [Tue, 3 Jun 2014 12:48:43 +0000 (20:48 +0800)]
Symmetric King Safety: take 2

Another attempt at retiring current asymmetric
king evaluation and use a much simpler symmetric
one. As a good side effect we can avoid recalculating
eval after a null move.

Tested in no-regression mode and passed

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 21580 W: 3752 L: 3632 D: 14196

LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 18253 W: 2593 L: 2469 D: 13191

And a LTC regression test against SF DD to
verify we don't have regression against
weaker engines due to some kind of 'contempt'
effect:

ELO: 54.69 +-2.1 (95%) LOS: 100.0%
Total: 40000 W: 11072 L: 4827 D: 24101

bench: 8205159

6 years agoUse see() instead of see_sign() in previous patch
Marco Costalba [Tue, 3 Jun 2014 10:38:58 +0000 (12:38 +0200)]
Use see() instead of see_sign() in previous patch

Before it was working by accident in case of
see_sign() and failing with see() due to how
castle moves are coded (king captures the rook).

Better to explicitly filter out castling moves
and use see() without any surprise/trick.

No functional case.

6 years agoAdd some const qualifier
kinderchocolate [Tue, 3 Jun 2014 05:45:10 +0000 (15:45 +1000)]
Add some const qualifier

No functional change.

6 years agoDecrease reduction for moves that escape a capture
Reuven Peleg [Tue, 3 Jun 2014 09:32:45 +0000 (11:32 +0200)]
Decrease reduction for moves that escape a capture

Passed both STC
LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 10094 W: 1833 L: 1704 D: 6557

and LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 27738 W: 4147 L: 3928 D: 19663

bench : 8599236

6 years agoRetire Polyglot Book management
Marco Costalba [Sun, 1 Jun 2014 13:29:34 +0000 (15:29 +0200)]
Retire Polyglot Book management

Book handling belongs to GUI, we kept this code
for historical reasons, but nowdays there is
really no need of this old, (mostly) unused
and especially incorrect designed functionality.

It is up to the GUI to choose the book (far easier for
the user) and to select the book parameters. In no
place, including fishtest, TCEC, rating lists, etc.
the "own book" is used, moreover currently SF is
released without any book and even if in the future we
bundle a book in the release package, it will be the GUI
that will take care of it.

This corrects a wrong design decision that Galurung
and later Stockfish inherited from what was common
practice many yeas ago.

No functional change.

6 years agoRetire eval weights UCI options
Marco Costalba [Sun, 1 Jun 2014 11:37:21 +0000 (13:37 +0200)]
Retire eval weights UCI options

There is really little that user can achieve (apart
from a weakened engine) tweaking these parameters
that are already tuned and have no immediate or visible
effect.

So better do not expose them to the user and avoid the
typical "What is the best setup for my machine?" kind of
question (by far the most common, by far the most useless).

No functional change.

6 years agoRetire polyglot.ini
Marco Costalba [Sat, 31 May 2014 21:37:20 +0000 (23:37 +0200)]
Retire polyglot.ini

All actively maintained GUI are able
to understand UCI protocol, so there
is no more need for this obsolete file.

No functional change.

6 years agoRestore development version
Marco Costalba [Sat, 31 May 2014 21:34:36 +0000 (23:34 +0200)]
Restore development version

bench: 8732553

6 years agoStockfish 5
Marco Costalba [Sat, 31 May 2014 07:16:54 +0000 (09:16 +0200)]
Stockfish 5

Stockfish bench signature is: 8732553

6 years agoRevert "Symmetric king safety"
Marco Costalba [Mon, 26 May 2014 19:39:48 +0000 (21:39 +0200)]
Revert "Symmetric king safety"

Regression test of 40K games at 60 secs shows
this commit to be a 2-3 ELO regression.

So revert to original king safety.

bench: 8732553

6 years agoFix a warning with Intel compiler
Marco Costalba [Sat, 24 May 2014 22:21:46 +0000 (00:21 +0200)]
Fix a warning with Intel compiler

warning #2259: non-pointer conversion from
"int" to "int16_t={short}" may lose significant
bits.

No functional change.

6 years agoTidy up tt.h
Marco Costalba [Sat, 24 May 2014 21:53:01 +0000 (23:53 +0200)]
Tidy up tt.h

Backport some non-functional changes
found working on 'dense TT' patch.

No functional change.

6 years agoAdd perft 'divide' command
Marco Costalba [Sat, 24 May 2014 02:31:36 +0000 (04:31 +0200)]
Add perft 'divide' command

To show perft numbers for each move. Just
use 'divide' instead of 'perft', for instance:

position startpos moves e2e4 e7e5
divide 4

Inspired by Ronald de Man.

No functional change.

6 years agoUpdate polyglot.ini after last patch
Marco Costalba [Mon, 19 May 2014 19:19:47 +0000 (21:19 +0200)]
Update polyglot.ini after last patch

No functional change.

6 years agoSymmetric king safety
Lucas Braesch [Mon, 19 May 2014 12:22:15 +0000 (14:22 +0200)]
Symmetric king safety

Retire current asymmetric king evaluation
and use a much simpler symmetric one.

As a side effect retire the infamous
'Aggressiveness' and 'Cowardice' UCI
options.

Tested in no-regression mode,

Passed both STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 33855 W: 5863 L: 5764 D: 22228

And LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 40571 W: 5852 L: 5760 D: 28959

bench: 8321835

6 years agoFix an off-by-one bug in extract_pv_from_tt
Marco Costalba [Sat, 17 May 2014 20:56:35 +0000 (22:56 +0200)]
Fix an off-by-one bug in extract_pv_from_tt

At root we start counting plies from 1,
instead pv[] array starts from 0. So
the variable 'ply' we use in extract_pv_from_tt
to index pv[] is misnamed, indeed it is
not the real ply, but ply-1.

The fix is to leave ply name in extract_pv_from_tt
but assign it the correct start value and
consequentely change all the references to pv[].
Instead in insert_pv_in_tt it's simpler to rename
the misnamed 'ply' in 'idx'.

The off-by-one bug was unhidden when trying to use
'ply' for what it should have been, for instance in
this position:

position fen 8/6R1/8/3k4/8/8/8/2K5 w - - 0 1

at depth 24 mate line is erroneusly truncated due
to value_from_tt() using the wrong ply.

Spotted by Ronald de Man.

bench: 8732553

6 years agoExtract a reliable PV line
Marco Costalba [Sat, 17 May 2014 10:49:52 +0000 (12:49 +0200)]
Extract a reliable PV line

Truncate the extracted PV from the point where
the score stored in hash starts to deviate from
the root score.

Idea from Ronald de Man.

bench: 8732553

6 years agoDrop to qsearch at low depth in razoring
Michel Van den Bergh [Tue, 13 May 2014 20:33:41 +0000 (22:33 +0200)]
Drop to qsearch at low depth in razoring

If razoring conditions are satisfied and
depth is low, then directly drop in qsearch.

Passed both STC
LLR: 2.98 (-2.94,2.94) [-1.50,4.50]
Total: 12914 W: 2345 L: 2208 D: 8361

And LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 50600 W: 7548 L: 7230 D: 35822

bench: 8739659

6 years agoRemove undefended minors
Arjun Temurnikar [Tue, 13 May 2014 19:35:10 +0000 (21:35 +0200)]
Remove undefended minors

Tested in "no regression" mode.

Passed both STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 68026 W: 12277 L: 12236 D: 43513

And LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 85682 W: 12861 L: 12836 D: 59985

bench: 7311935

6 years agoSave stalemates in TT
Marco Costalba [Sun, 11 May 2014 08:56:25 +0000 (10:56 +0200)]
Save stalemates in TT

When there aren't legal moves after
a search, instead of returning imediately,
save bestValue in TT as in the usual case.

There is really no reason to special case
this one.

With this patch is fully fixed (again) follwing
position:

    7k/6p1/6B1/5K1P/8/8/8/8 w - - 0 1

Also in SMP case.

bench: 8802105

6 years agoRetire "Idle Threads Sleep" UCI option
Marco Costalba [Sun, 11 May 2014 08:13:56 +0000 (10:13 +0200)]
Retire "Idle Threads Sleep" UCI option

After last Joona's patch there is no measurable
difference between the option set or unset.

Tested by Andreas Strangmüller with 16 threads
on his Dual Opteron 6376.

After 5000 games at 15+0.05 the result is:

1 Stockfish_14050822_T16_on   : 3003  5000 (+849,=3396,-755), 50.9 %
2 Stockfish_14050822_T16_off  : 2997  5000 (+755,=3396,-849), 49.1 %

bench: 880215

6 years agoMake imbalance table more clear
Arjun Temurnikar [Sat, 10 May 2014 06:18:09 +0000 (23:18 -0700)]
Make imbalance table more clear

No functional change.

6 years agoPass Position as const ref in update_stats()
Reuven Peleg [Thu, 8 May 2014 20:18:19 +0000 (23:18 +0300)]
Pass Position as const ref in update_stats()

No functional change.

6 years agoClarify some comments in SMP code
Marco Costalba [Thu, 8 May 2014 07:09:35 +0000 (09:09 +0200)]
Clarify some comments in SMP code

Spotted by Joona.

No functional change.

6 years agoReformat and simplify previous patch
Marco Costalba [Wed, 7 May 2014 06:47:18 +0000 (08:47 +0200)]
Reformat and simplify previous patch

No functional change.

6 years agoAllow a slave to 'late join' another splitpoint
Joona Kiiski [Sat, 3 May 2014 17:29:31 +0000 (18:29 +0100)]
Allow a slave to 'late join' another splitpoint

Instead of waiting to be allocated, actively search
for another split point to join when finishes its
search. Also modify split conditions.

This patch has been tested with 7 threads SMP and
passed both STC:

LLR: 2.97 (-2.94,2.94) [-1.50,4.50]
Total: 2885 W: 519 L: 410 D: 1956

And a reduced-LTC at  25+0.05
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 4401 W: 684 L: 566 D: 3151

Was then retested against regression in 3 thread case
at standard LTC of  60+0.05:

LLR: 2.96 (-2.94,2.94) [-4.00,0.00]
Total: 40809 W: 5446 L: 5406 D: 29957

bench: 8802105

6 years agoRewrite Score extractors
Ron Britvich [Mon, 5 May 2014 06:52:14 +0000 (08:52 +0200)]
Rewrite Score extractors

Less tricky and even a bit faster. With this
version Visual Studio Ultimate 2013 Update 2 RC
runs fine even in O2 optimization.

No functional change.

6 years agoChange search() signature
Marco Costalba [Sun, 4 May 2014 11:11:32 +0000 (13:11 +0200)]
Change search() signature

Pass SpNode as template parameter.

No functional change.

6 years agoRevert dynamic contempt
Marco Costalba [Sun, 4 May 2014 07:58:49 +0000 (09:58 +0200)]
Revert dynamic contempt

On a final fixed game number test it failed
to prove better than standard version.

STC 15+0.05

ELO: -0.86 +-1.7 (95%) LOS: 15.8%
Total: 57578 W: 10070 L: 10213 D: 37295

bench: 8802105

6 years agoRevert stalemate detection in evaluation
Marco Costalba [Sun, 4 May 2014 07:42:05 +0000 (09:42 +0200)]
Revert stalemate detection in evaluation

Unfortunatly we have a slow down that causes
a regression in STC with no-regression mode:

LLR: -2.96 (-2.94,2.94) [-3.00,1.00]
Total: 22454 W: 3836 L: 4029 D: 14589

bench: 8678654

6 years agoRevert back KBPsK to latest Gary's version
Marco Costalba [Sun, 4 May 2014 07:31:25 +0000 (09:31 +0200)]
Revert back KBPsK to latest Gary's version

The bug was found to be elsewhere. This version
is correct and also is able to detect as draw
positions like:

8/8/5b2/8/8/4k1p1/6P1/5K2 b - - 6 133

bench: 8678654

6 years agoFix KXK endgame
Ronald de Man [Sat, 3 May 2014 19:37:24 +0000 (21:37 +0200)]
Fix KXK endgame

Position is win also if strong side has a bishop
and a knight (plus other material, otherwise
KBNK would be triggered instead of KXK).

This fixes a subtle bug where a search on position

k7/8/8/8/8/P7/PB6/K7 b - - 6 1

Instead of returning a draw score, suddendly returns
a big score. This happens because at one point in
search we reach this position:

8/Pk6/8/8/8/4B3/P7/K7 w - - 3 8

Where white can promote. In case of rook promotion (and also in case of
queen promotion) the resutling position gets a huge static eval that is
above VALUE_KNOWN_WIN (from the point of view of white). So for rook
promotion it is

          &&  futilityBase > -VALUE_KNOWN_WIN

that prevents futility pruning in qsearch. (Removing this condition indeed
lets the problem occur). Raising the static eval for K+B+N+X v K to a value
higher than VALUE_KNOWN_WIN fixes this particular problem without having to
introduce an extra futility pruning condition in qsearch.

I just checked and it seems K+R v K, K+2B v K and even K+B+N v K already get
a huge static eval. Why not K+B+N+P v K?

I think this fix corrects an oversight. There is special code for KBNK, but
KBNXK is handled by KXK, so the test for sufficient material should also test
for B+N.

bench: 8678654

6 years agoFully correct stealmate detection
Marco Costalba [Sat, 3 May 2014 10:09:56 +0000 (12:09 +0200)]
Fully correct stealmate detection

In the (rare) cases when the two conditions
are true, then fully check again with a slow
but correct MoveList<LEGAL>(pos).size().

This is able to detect false positives like
this one:

8/8/8/Q7/5k1p/5P2/4KP2/8 b - - 0 17

When we have a possible simple pawn push that
is not stored in attacks[] array. Because the
third condition triggers very rarely, even if
it is slow, it does not alters in a measurable
way the average speed of the engine.

bench: 8678654

6 years agoAdd stealmate detection to evaluation
Marco Costalba [Sat, 3 May 2014 09:45:58 +0000 (11:45 +0200)]
Add stealmate detection to evaluation

Currently a stealmate position is misevaluated
in a negative/positive score, this leads qsearch(),
that does not detects stealmates too, to return the
wrong score and this yields to some kind of endgames
to be completely misevaluated.

With this patch is fully fixed follwing position

7k/6p1/6B1/5K1P/8/8/8/8 w - - 0 1

Also in SMP case.

Correct root cause analysys by Ronald de Man.

bench: 8678654

6 years agoRevert to Galurung's KBPsK endgame
Marco Costalba [Fri, 2 May 2014 08:27:13 +0000 (10:27 +0200)]
Revert to Galurung's KBPsK endgame

After reverting to the original Tord's
endgame, a search on position

7k/6p1/6B1/5K1P/8/8/8/8 w - - 0 1

Reports, correctly, a draw score instead of
an advantage for white.

Issue reported by Uri Blass.

bench: 8678654

6 years agoUse only standard conforming eg_value()
Marco Costalba [Thu, 1 May 2014 21:08:07 +0000 (23:08 +0200)]
Use only standard conforming eg_value()

Remove the optimization for Intel, is not
standard and can break at any time, moreover
our release build is not done with Intel C++
anymore so we don't need to sqeeze the extra
speed out from this compiler.

No functional change.

6 years agoDon't save stale value in TT after split
Marco Costalba [Thu, 1 May 2014 14:25:17 +0000 (16:25 +0200)]
Don't save stale value in TT after split

If we return from split with a stale value
due to a stop or a cutoff upstream occurred,
then we exit moves loop and save a stale value
in TT before returning search().

This patch, from Joona, fixes this.

bench: 8678654

6 years agoBetter document search stop condition
Marco Costalba [Thu, 1 May 2014 06:28:49 +0000 (08:28 +0200)]
Better document search stop condition

Handling a stop or a cutoff in the search is
a tricky business, so better document this
difficult part of the code.

No functional change.

6 years agoRemove dead code in search
Marco Costalba [Thu, 1 May 2014 05:44:32 +0000 (07:44 +0200)]
Remove dead code in search

We can never have bestValue == -VALUE_INFINITE at
the end of move loop because if no legal move exists
we detect it with previous condition on !moveCount,
if a legal move exists we never prune it due to
futility pruning condition:

bestValue > VALUE_MATED_IN_MAX_PLY

So this code never executes, as I have also verified
directly.

Issue reported by Joona.

No functional change.

6 years agoFix a compile error with Intel C++
Marco Costalba [Wed, 30 Apr 2014 06:55:45 +0000 (08:55 +0200)]
Fix a compile error with Intel C++

Intel compiler is very picky:
"error: this operation on an enumerated type requires an
applicable user-defined operator function"

Reported by Tony Gaor.

No functional change.

6 years agoPenalize hanging pieces
snicolet [Sat, 26 Apr 2014 23:35:46 +0000 (01:35 +0200)]
Penalize hanging pieces

Passed both STC
LLR: 2.95 (-2.94,2.94) [-1.50,4.50]
Total: 8519 W: 1565 L: 1440 D: 5514

And LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 60618 W: 9141 L: 8777 D: 42700

bench: 8678654

6 years agoRearrange interpolation formula
Marco Costalba [Mon, 28 Apr 2014 15:15:16 +0000 (17:15 +0200)]
Rearrange interpolation formula

Put the division at the end to reduce
rounding errors. This alters the bench
due to different rounding errors, but
should not alter ELO in any way.

bench: 7615217

6 years agoMinor stuff scattered around
mstembera [Mon, 28 Apr 2014 08:30:06 +0000 (01:30 -0700)]
Minor stuff scattered around

Just random minor stuff I found while browsing the code.

No functional change.

6 years agoRemove other useless floor()
Marco Costalba [Sun, 27 Apr 2014 17:17:40 +0000 (19:17 +0200)]
Remove other useless floor()

No functional change.

6 years agoDon't need floor() in timeman.cpp
Marco Costalba [Sun, 27 Apr 2014 17:10:00 +0000 (19:10 +0200)]
Don't need floor() in timeman.cpp

For positive numbers result is equivalent:
http://stackoverflow.com/questions/3300290/cast-to-int-vs-floor

Spotted by Joseph Ellis.

No functional change.

6 years agoFix Intel compiler warnings
Marco Costalba [Sun, 27 Apr 2014 10:02:36 +0000 (12:02 +0200)]
Fix Intel compiler warnings

Fallout from previous patch: Intel compiler
is very noisy.

No functional change.

6 years agoRemove some useless casts
Marco Costalba [Sun, 27 Apr 2014 09:40:44 +0000 (11:40 +0200)]
Remove some useless casts

No functional change.

6 years agoWe can add an integer to a Value
Marco Costalba [Sun, 27 Apr 2014 08:13:59 +0000 (10:13 +0200)]
We can add an integer to a Value

We have defined corresponding operators,
so rely on them to streamline the code
and increase readibility.

No functional change.

6 years agoRemove rook passers eval completely
Arjun Temurnikar [Sun, 20 Apr 2014 23:44:18 +0000 (16:44 -0700)]
Remove rook passers eval completely

Tested in no-regression mode.

Passed STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 17727 W: 3248 L: 3122 D: 11357

And (a very long!) LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 106327 W: 16258 L: 16265 D: 73804

bench: 7396783

6 years agoReformatting in material.h
Marco Costalba [Sun, 27 Apr 2014 07:31:22 +0000 (09:31 +0200)]
Reformatting in material.h

No functional change.

6 years agoMove game phase constants to enum Value
Marco Costalba [Sun, 27 Apr 2014 07:23:45 +0000 (09:23 +0200)]
Move game phase constants to enum Value

No functional change.

6 years agoSpeed up by almost 3%
Marco Costalba [Sat, 26 Apr 2014 22:25:18 +0000 (00:25 +0200)]
Speed up by almost 3%

This apparentely silly tweak allows
to speed up the bench by almost 3%.

Not clear why, repeating with perft,
the speed up vanishes.

Suggested by Jonathan Calovski.

No functional change.

6 years agoFix issues detected by Coverity Scan
Marco Costalba [Sat, 26 Apr 2014 07:20:37 +0000 (09:20 +0200)]
Fix issues detected by Coverity Scan

Most of Coverity Scan reports are false
positives, but in rare cases we have
confirmed (very small) issues.

No functional change.

6 years agoSpeed up picking of killers
Marco Costalba [Fri, 25 Apr 2014 10:53:51 +0000 (12:53 +0200)]
Speed up picking of killers

Changing the order of the conditions gives
about 1% speed up!

No functional change.

6 years agoRemove RookOn7th and merge values into psqt
Arjun Temurnikar [Sun, 20 Apr 2014 10:50:03 +0000 (03:50 -0700)]
Remove RookOn7th and merge values into psqt

Tested in no-regression mode:

STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 55678 W: 9954 L: 9892 D: 35832

LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 9238 W: 1448 L: 1311 D: 6479

bench: 7905850

6 years agoRemove penalty for knight when few enemy pawns
Arjun Temurnikar [Sat, 19 Apr 2014 01:54:23 +0000 (18:54 -0700)]
Remove penalty for knight when few enemy pawns

Tested in standard mode at STC and no-regression
mode at LTC:

STC
LLR: 2.97 (-2.94,2.94) [-1.50,4.50]
Total: 19503 W: 3502 L: 3349 D: 12652

LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 67474 W: 9974 L: 9921 D: 47579

bench: 8331217

6 years agoShuffle movepicker score
Jonathan Calovski [Wed, 23 Apr 2014 03:14:46 +0000 (13:14 +1000)]
Shuffle movepicker score

Believed to be a speed optimization as benched
on Windows with bench realtime affinity 0x1 deleting
highest and lowest runs:

Base Test
1549259 1608202
1538115 1583934
1543168 1556938
1536365 1554179
1533026 1582010

Signature remains unchanged and gives anywhere from 1-2% nps
boost in analysis depending on number of cores used.

No functional change.

6 years agoCorrectly apply previous patch
Marco Costalba [Thu, 24 Apr 2014 06:35:13 +0000 (08:35 +0200)]
Correctly apply previous patch

Apply the correct values from previous patch.

bench: 8082049

6 years agoMove queen vs. 3 minors rule to imbalance tables
joergoster [Sat, 19 Apr 2014 14:41:56 +0000 (16:41 +0200)]
Move queen vs. 3 minors rule to imbalance tables

Tuned with CLOP after 57k games.

Simplification: tested in no-regression mode.

Passed both STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 17254 W: 3159 L: 3032 D: 11063

And LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 32413 W: 4967 L: 4864 D: 22582

bench: 8082049

6 years agoRevert "Generalize shift_bb() to handle double pushes"
Marco Costalba [Mon, 21 Apr 2014 18:54:55 +0000 (20:54 +0200)]
Revert "Generalize shift_bb() to handle double pushes"

Seems to intorduce some compiler warning as
reported by Gary. Warning seems bogus, but
revert anyhow.

No functional change.

6 years agoReset DrawValue[] before new search
Marco Costalba [Mon, 21 Apr 2014 12:30:27 +0000 (14:30 +0200)]
Reset DrawValue[] before new search

Spotted by Ronald de Man

bench: 7384368