7 months agoFix Pawn-drop mate in Kyoto Shogi master
H.G.Muller [Sun, 12 Aug 2018 18:31:38 +0000]
Fix Pawn-drop mate in Kyoto Shogi

The rule that you cannot checkmate with a Pawn drop was also applied in
Kyoto Shogi, where it doesn't apply. Even worse, also Rook-drop mates
were forbidden.

7 months agoFix periodic updates
H.G.Muller [Sun, 12 Aug 2018 18:09:59 +0000]
Fix periodic updates

The CECP periodic updates should give the move that is being searched,
not the one that just has been searched. So we should record the root
info before searching the move. In addition, movesleft should not include
the move currently being searched, or XBoard would not display anything
in the update field of the engine-output window during the first move.

7 months agoInclude time.h for Windows
H.G.Muller [Sun, 12 Aug 2018 17:59:29 +0000]
Include time.h for Windows

In Windows we use clock() to get the CPU time, and use the constant
CLOCKS_PER_SEC to convert the ticks.

9 months agoFix periodic updates
H.G.Muller [Tue, 29 May 2018 15:09:51 +0000]
Fix periodic updates

The number of moves yet to go was off by one. In addition we now ignore
zapped moves at the end of the list, so it will be obvious when the engine
is working on the last move of the iteration.

11 months agoFix Euro-Shogi holdings size
H.G.Muller [Fri, 13 Apr 2018 21:03:37 +0000]
Fix Euro-Shogi holdings size

Euro-Shogi doesn't just have the Shogi Knight as dummy piece, but also
the Lance and Silver. (This to be able to use the piece definitions of
normal Shogi.) As it was the Euro-Knight would never be dropped.

11 months agoFix periodic upates
H.G.Muller [Fri, 13 Apr 2018 13:37:28 +0000]
Fix periodic upates

The 'stat01' commans must report on the move that is currently being
searched. Not the one that just has been searched. So the statement
to save the root info globally has been moved to before the recursive call.

11 months agoFix move of black +N in Euro-Shogi
H.G.Muller [Fri, 13 Apr 2018 07:24:04 +0000]
Fix move of black +N in Euro-Shogi

The black +N was moving as a white Gold!

11 months agoImplement 'pause' command
H.G.Muller [Fri, 13 Apr 2018 06:53:06 +0000]
Implement 'pause' command

The CECP 'pause' an 'resume' commands are implemente, and announced in
the corresponding feature. Commands in paused mode are ignored, except
'quit'. The ReadClock() function has been adapted to allow initialization
of the startTime with an offset, to give the paused time back to the clock.
For this the nodeCount (which naturally stops incrementing during pauses)
has to be reset outside ReadClock again.

11 months agoAdd option for move exclusion
H.G.Muller [Thu, 12 Apr 2018 21:47:19 +0000]
Add option for move exclusion

A string option 'Exclude move:' is added for the benefit of GUIs that do
not support the exclude feature. By prefixing with a '!' the move can be
included again. To prevent crashing on an invalid move syntax, the routine
ParseMove() had to be made more robust, returning 0 in such cases.

11 months agoGroup demotions with non-captures
H.G.Muller [Thu, 12 Apr 2018 13:22:04 +0000]
Group demotions with non-captures

Promotions in Kyoto Shogi are not moves that deserve to be treated as
captures. This would search basically all moves in QS, and would hardly
sort any moves by history. Now that demotions are treated as non-captures
QS search explosion is much less of a problem.

11 months agoImplement playing by node count
H.G.Muller [Thu, 12 Apr 2018 12:56:54 +0000]
Implement playing by node count

The CECP 'nps' command is supported, to allow conversion of the clock times
to a node budget. A new routine for reaing the CPU time that has been used
had to be added for this. ReadClock() got a second parameter for indicating
whether the time is requested for printing (CPU time) or for timing (nodes).

11 months agoImprove move sorting
H.G.Muller [Wed, 11 Apr 2018 18:35:08 +0000]
Improve move sorting

Just prepending the best move as a duplicat, an relying on a hash hit
to skip searching the later occurrence, is not satisfactory in multi-PV
mode, as moves with the same score would both output a PV. We now erase
the original move (by setting it to the invalid 0), an skip such moves
in the move loop.

11 months agoImplement multi-PV
H.G.Muller [Wed, 11 Apr 2018 18:15:26 +0000]
Implement multi-PV

An option 'Multi-PV margin' is added to set a margin in centi-Pawn.
This margin is than subtracted from the bestScore in the root to get alpha.
For this, bestScore an alpha must be increased inependently, as scores
can exceed alpha without exceding bestScore. The Multi-PV option has to be
recognized with the options that require a search abort, to make a new
analysis search start.

11 months agoImplement move exclusion
H.G.Muller [Wed, 11 Apr 2018 17:37:00 +0000]
Implement move exclusion

A 64KB moveMap[] is added to keep track of which moves are excluded in the
root. It is indexed directly by the lowest 16 bits of the move code,
(the from- and to-square), and can be almost entirely used, as the board
measures 121 squares, an the 'shadow' board (another 121 squares) can be used
both as from- and to-square as well. So that in theory 242*242 moves can
be encoded.

11 months agoImplement periodic upates
H.G.Muller [Wed, 11 Apr 2018 11:00:10 +0000]
Implement periodic upates

The CECP '.' command is now properly respone to with a 'stat01' line.
The info in this line is saved in global variables at the end of the
move loop, where a new root-only code section is added to do this.

11 months agoImplement analysis mode
H.G.Muller [Wed, 11 Apr 2018 08:53:43 +0000]
Implement analysis mode

Functions are added to test for input (platform dependent!), and TimeIsUp()
now calls these before reading the clock. Any input command that cannot be
processed during search then forces an abort like the time is up; other
commands are processed. Without input we consider the time, except when
in analyze mode, where there by definition is infinite time.
  Before waiting for a command in the main loop, a search is started when
we are in analyze mode.

11 months agoMove #includes of system headers to top of file
H.G.Muller [Wed, 11 Apr 2018 07:41:22 +0000]
Move #includes of system headers to top of file

Including system headers after having #defined other stuff sometimes gives
problems, if the header uses variables with names equal to a macro. Use of
names not starting with '_' should be consiered a bug in the header, but
it happens. To guard against this the platform-dependent time reading
was moved to the beginning of the file.

11 months agoSuppress pruning of futile interpositions in Kyoto Shogi
H.G.Muller [Wed, 11 Apr 2018 07:32:12 +0000]
Suppress pruning of futile interpositions in Kyoto Shogi

In horizon nodes check evasions through drops on unprotected squares were
pruned, based on the idea that the checking slider would simply capture
the piece to renew the check. In games with automatic promotion (such as
Kyoto an micro-Shogi) this capture would alter the piece type, so we cannot
be sure it woul renew the check. The auto-promotion is recognize from
'promoDrops', as these always seem to go together.

11 months agoSimplify CheckDrops()
H.G.Muller [Wed, 11 Apr 2018 07:25:00 +0000]
Simplify CheckDrops()

CheckDrops() tested half-way the iteration whether it should also try
dropping the unpromoted piece, based on the assumption that we must do
the Pawn iteration for dropping +P, even if dropping P is forbidden.
But in games where +P can be dropped, dropping P (in a place where it
checks) can never be forbidden!

11 months agoMake length of repeat key symbolic
H.G.Muller [Tue, 10 Apr 2018 19:48:18 +0000]
Make length of repeat key symbolic

The number of bits of the boar key in the total repeat key is now #defined
by a macro REPLEN, instead of being a numeric constant. (The remaining bits
contain the evaluation score.) This way it can be easily changed. (Which
might be needed to prevent overflow of the evaluation part, at the expense
of more false repetition detects.)

11 months agoImplement Kyoto Shogi
H.G.Muller [Tue, 10 Apr 2018 17:25:24 +0000]
Implement Kyoto Shogi

Previous commits have created all infra-structure needed to handle
Kyoto Shogi. This patch adds Kyoto Shogi to the list of variants,
plus the required info (setup FEN, piece IDs and moves, pieceToCharTable).
The strongest member of each alternating pair is defined as the promoted
piece, so that P, L and N will be subjected to the drop restrictions
(applied only to unpromoted pieces). As usual P and L will be piece 0 and 1,
while N will be the last unpromoted piece. A compacted version of the
piece-square data is included as initialized data, as the non-ergodic pieces
require very unusual and specific tables. This data is used to create a
separate PST for each piece type. (Two 5x5 tables packed into one normal
11x11 space to not exceed the normal number of tables.) The (common) promoGain
of all hand pieces had to be set to a non-zero value in order to prevent
overflow in the had PST, as the difference between hand value and value of
the unpromoted piece is unusually large (as promoted dropping is possible).

11 months agoMake entry of promoting drops possible
H.G.Muller [Tue, 10 Apr 2018 16:59:18 +0000]
Make entry of promoting drops possible

If the piece IDs string also specifies IDs for promoted pieces,
using such an ID in drop moves will encode the move as a drop of
the unpromoted partner, plus a promotion. Use of such IDs in a FEN
would be automatically understood.
  On output moves that are encoded as promotion and drop will use the
ID specified for the promoted piece (rather than a + suffix on the drop).

11 months agoAllow demotion of pieces
H.G.Muller [Tue, 10 Apr 2018 16:11:19 +0000]
Allow demotion of pieces

The promoInc is now XORed with the moving piece, rather than ORed into it.
This allows moves that specify promotion (through off-board to-square) to
be applied to already promoted pieces, with as a result they revert to
their unpromoted form.

11 months agoDon't assume Knight to be always piece number 6
H.G.Muller [Tue, 10 Apr 2018 15:53:45 +0000]
Don't assume Knight to be always piece number 6

To determine the number of ranks where dropping is not allowed,
(for pieces that have their drop-limitation flag set in lances[]),
we have to distinguish the Knight. This is now done by assuming that
any piece other than the first two (which are always Pawn and Lance,
even if this requires the Lance to be present as a dummy) is a Knight.

11 months agoImplement promotion drops
H.G.Muller [Tue, 10 Apr 2018 15:42:31 +0000]
Implement promotion drops

The various routines for generating drop moves are now also able to
generate drops of the promoted version of the piece in hand, controlled
by a variable 'promoDrops'. For now this variable is set to forbid such

11 months agoAllow entire board to be promotion zone
H.G.Muller [Tue, 10 Apr 2018 15:59:51 +0000]
Allow entire board to be promotion zone

The test for determining whether a drop on first or last rank is actually
a drop on first rank (so it would not be subject to restrictions in Shogi)
was not working if the entire board was the promotion zone, as it was based
on being outside the zone for the applicable color. A test directly based
on the square number ow fixes that.

11 months agoAllow overlapping promotions zones
H.G.Muller [Tue, 10 Apr 2018 15:26:08 +0000]
Allow overlapping promotions zones

The white and black contributions to the zone flags are now ORed into
zoneTab[], (which would already have been cleared when starting any new
variant), so that they won't erase each other.

11 months agoMake reference to mini-Shogi symbolic
H.G.Muller [Tue, 10 Apr 2018 15:21:53 +0000]
Make reference to mini-Shogi symbolic

I various parts of the code it was assumed that mini-Shogi was listed
as second variant in the variant-definition array. To make it easier
to reshuffle variants a macro MINI_NR, #defined close to the array,
makes it easier to shuffle the order of variants.

11 months agoFix recognition of CECP 'level' command
H.G.Muller [Tue, 10 Apr 2018 15:09:56 +0000]
Fix recognition of CECP 'level' command

As the sscanf to extract the TC parameters was attempting to match the
initial keyword 'level' as well, while the first byte of the input buffer
had already been zeroed to mark the command as processed, the 'level'
command was completely ignored, and CrazyWa was always playing at its
default TC of 40 moves / 5 min.

11 months agoFix taking back of moves
H.G.Muller [Tue, 10 Apr 2018 16:07:23 +0000]
Fix taking back of moves

The loop over game history to remake the moves upto the desired position
was incrementing moveNr, but the RootMakeMove() it called already did that
too. With as a result that only white moves were replayed.

11 months agoFix recognition of variant 11x17+16_shogi
H.G.Muller [Tue, 10 Apr 2018 15:01:39 +0000]
Fix recognition of variant 11x17+16_shogi

The general recognition of size-overridden variants prevented that an
name with override prefix was still sought as a full name. And because the
17 does not correspond to the true number of ranks, 11x17+16_shogi was not
recognized from the board parameters either.
  The duplicate of euroshogi as size-overridden shogi was misguided, and has
been removed: description of a variant by size overrides is now always
recogized automatically.

13 months agoAdd Euro-Shogi
H.G.Muller [Tue, 20 Feb 2018 15:37:22 +0000]
Add Euro-Shogi

Adding the new variant Euro-Shogi required one new piece type, as the Knight
there also has a sideway step. This 'Euro-Knight' is added to the Shogi
pieces as an extra piece, so that the promo-codes and piece moves of Shogi
can be used. Only the IDs need to be different, as the N now stands for
Euro-Knight. The variant is added both under the name 'euroshogi' as
engine-defined variant, and 8x8+5_shogi.

13 months agoFix Tori and Alien Wa
H.G.Muller [Mon, 19 Feb 2018 13:12:52 +0000]
Fix Tori and Alien Wa

Slipping in the alternative definition of Wa Shogi as 11x17+16_chu, for
the benefit of the WinBoard Alien Edition, had broken Tori Shogi, as
well as being defective itself, because the ptc[], betza[] and pstType[]
and lances[] tables (which are indexed by the variant number) were not
adapted to the new variant numbering.

13 months agoChange code for testing acceptable evasion drops
H.G.Muller [Sun, 18 Feb 2018 22:18:38 +0000]
Change code for testing acceptable evasion drops

The code deciding whether a piece could be dropped to block a distant check
was dependant on the exact numbering of the variants, making it difficult
to add new variants. It is replaced by code that only requires that variants
without dropping restriction in the last two ranks come behind all others.
The number of the first such variant is given by the constant KNIGHTLESS
(which must be adapted if variants with Knights are added!).

13 months agoFix of double-Q-sac fix
H.G.Muller [Sun, 18 Feb 2018 19:08:02 +0000]
Fix of double-Q-sac fix

The Queen is piece #4 instead of 5.

13 months agoBump version to 1.0.5
H.G.Muller [Sun, 18 Feb 2018 14:01:32 +0000]
Bump version to 1.0.5

13 months agoBump version number to 1.0.4
H.G.Muller [Sun, 18 Feb 2018 11:05:13 +0000]
Bump version number to 1.0.4

This version is functionally equivalent to the one participating in the
computer Crazyhouse championships in December 2016 and 2017, albeit with
a less messy source code.

13 months agoMake index of Tori Shogi symbolic
H.G.Muller [Sun, 18 Feb 2018 10:57:31 +0000]
Make index of Tori Shogi symbolic

The variant number is used in several places to decide the result of
repetitions, and Tori Shogi is special in that respect. To make it
easier to add variants, these tests now use a symbolic constant TORI_NR
rather than a hard-coded '6'.

13 months agoFix board corruption on null move
H.G.Muller [Sun, 18 Feb 2018 10:20:09 +0000]
Fix board corruption on null move

Faking a piece other than the one actually there on the to-square
of a null move interfered with the kludge for testing castling legality,
by actually putting back that piece there. Better solutions should be
possible here.

13 months agoSuppress initiative bonus after spite check
H.G.Muller [Sun, 18 Feb 2018 10:13:55 +0000]
Suppress initiative bonus after spite check

The bonus for a vulnerable opponent King should be added to the static
eval, but not to the 'undetermined mate score' replacing a stand pat
after a spite check (i.e. a check tossing material) + evasion made
us reach the horizon.

13 months agoRemove spurious setting of alpha
H.G.Muller [Sat, 17 Feb 2018 18:29:29 +0000]
Remove spurious setting of alpha

Alpha is reset at the end of the iteration, and setting it to startAlpha
at the beginning destroys the stand-pat contribution in QS.

13 months agoFix score-range return on pin break
H.G.Muller [Sat, 17 Feb 2018 18:26:54 +0000]
Fix score-range return on pin break

The lower end of the score range was not returned when a node was aborted
because the pin test detected King capture.

13 months agoRemember 12 bits of eval in repeat keys
H.G.Muller [Sat, 17 Feb 2018 13:23:29 +0000]
Remember 12 bits of eval in repeat keys

The repeat key is a combination of the hash key for the board position,
and the evaluation. This is used for detecting pseudo-repeats, where the
eval part is then used to forbid material-buring loops. But burning a
Queen changes the eval by 2*600 = 1200 points, and 12 bits are needed
to store that without (signed!) overflow. As only 11 bits were used,
loops burning a Queen were considered winning. This would still be the
case for loops burning two Queens.
  Increasing the number of eval bits to 12 has increased the probability
for a falsely detected pseudo-repetition to one in a million, which still
seems acceptable.

13 months agoImplement iterative deepening in QS
H.G.Muller [Sun, 11 Feb 2018 12:57:56 +0000]
Implement iterative deepening in QS

A depth limit is applied to QS, with the possibility to return a score
range when this limit is hit. If a non-null range survives to the root
of QS, the limit is increased, and QS redone. It should then extend the
tip of the unresolved branches, the resolved branches satisfactorily
present (i.e. with null range or as fail high/low) in the TT.

13 months agoFix castling through check
H.G.Muller [Sun, 11 Feb 2018 11:14:28 +0000]
Fix castling through check

Castling through check, like walking into check, is supposed to be  tested
through early move generation in the reply node. But this early generation
was triggered by testing whether the 'to-piece' was a King, while the way
castling is implemented promotes the King to a Rook. This way castling
escaped the test. Now early move generation is done based on the from-piece.

13 months agoFix check test
H.G.Muller [Sun, 11 Feb 2018 11:11:54 +0000]
Fix check test

When locating the check tet in a separate routine, the stack frame of
the paret node was used to return the result, rather than that of the
node itself.

21 months agoAdd logo
H.G.Muller [Sat, 3 Jun 2017 20:11:07 +0000]
Add logo

A PNG image for a logo is added.

21 months agoAdd source for man page
H.G.Muller [Sat, 3 Jun 2017 20:09:36 +0000]
Add source for man page

A .pod file is added, to generate a manual page from.

21 months agoDefine 11x17+16_chu as alias for Wa Shogi
H.G.Muller [Mon, 29 May 2017 18:35:43 +0000]
Define 11x17+16_chu as alias for Wa Shogi

Under the WinBoard 'Alien Edition' Wa Shogi has to be played as a variant
of Chu Shogi with modified board size. To accomodate the holdings, the
board must be 11x17, and needs the extra ranks blacked out. We thus added
11x17+16_chu as a duplicat of crazywa. The blacked-out ranks will appear
in the FEN of a setboard command as asterisks, so the FEN reader had to
be made to ignore these.

21 months agoRemove most debug print statements
H.G.Muller [Mon, 29 May 2017 17:31:58 +0000]
Remove most debug print statements

21 months agoFix typo in anaSP
H.G.Muller [Mon, 29 May 2017 16:23:09 +0000]
Fix typo in anaSP

21 months agoMask sort key from move when storing path
H.G.Muller [Mon, 29 May 2017 16:21:16 +0000]
Mask sort key from move when storing path

21 months agoMake sure no early move generation in null-move reply
H.G.Muller [Mon, 29 May 2017 15:38:03 +0000]
Make sure no early move generation in null-move reply

Now that we explicitly test for pinning of the e.p. victim, early move
generation (to test for King capture) is only needed after King moves.
But the toPiece on which we test this can be undefined after null move.
Rather than explicitly testing for null move when setting earlyGen,
we set toPiece to a Pawn when making the null move.

21 months agoRestore analogy stack pointer on second stand pat
H.G.Muller [Mon, 29 May 2017 14:58:11 +0000]
Restore analogy stack pointer on second stand pat

21 months agoClear complete repetition hash
H.G.Muller [Mon, 29 May 2017 14:38:01 +0000]
Clear complete repetition hash

The loop to clear the game history was still using the array bounds from
before the array was enlarged.

22 months agoClear hash table before every move
H.G.Muller [Mon, 15 May 2017 20:22:17 +0000]
Clear hash table before every move

To make bugs reproducible we temporarily put in code to clear all
hash entries before every move.

22 months agoRehash repetition keys in steps of 1
H.G.Muller [Mon, 15 May 2017 20:14:21 +0000]
Rehash repetition keys in steps of 1

The repetition key hash table does not store white and black moves
alternately, but in different halves of the table, so to find a slot
for re-hashing we better hunt for empty slots in steps of 1.

22 months agoMove Key declaration upstream
H.G.Muller [Mon, 15 May 2017 19:54:37 +0000]
Move Key declaration upstream

22 months agoReduce maxDepth
H.G.Muller [Mon, 15 May 2017 19:45:31 +0000]
Reduce maxDepth

The maximum search depth is now set to MAXPLY-2, to prevent overflow in
arrays with MAXPLY elements.

22 months agoPrevent pawn-drop mates in Shogi
H.G.Muller [Mon, 15 May 2017 13:15:08 +0000]
Prevent pawn-drop mates in Shogi

In case of a mate we now check if the previous move was a Pawn drop,
and correct the score to a win if we detect one. In Crazyhouse we
test for check, and correct to draw due to stalemate without one.

22 months agoDon't randomize mate scores
H.G.Muller [Mon, 15 May 2017 13:10:33 +0000]
Don't randomize mate scores

The randomization is supposed to be an amount in centi-Pawns, and applying
it to mate distance can prevent finding the mate.

22 months agoReturn a depth with repeats
H.G.Muller [Mon, 15 May 2017 13:01:53 +0000]
Return a depth with repeats

When a move is detected to lead to a repeat, we return the corresponding
score with a validity depth just enough to satisfy the current depth
request. This prevents earlier positions contaminated by the score to
last unnecessarily long in the hash table.

22 months agoFix spurious PV after repeat
H.G.Muller [Mon, 15 May 2017 13:00:02 +0000]
Fix spurious PV after repeat

We simulate return of an empty PV when a move is pruned because
of a repetition.

22 months agoScore quasi-repeats somewhat less severe
H.G.Muller [Mon, 15 May 2017 12:55:06 +0000]
Score quasi-repeats somewhat less severe

When there is a choice between a mate and a quasi-repeat, it is better
to go for the latter.

22 months agoEvaluate perpetual checks in Shogi variants
H.G.Muller [Mon, 15 May 2017 12:48:26 +0000]
Evaluate perpetual checks in Shogi variants

Detection of a repeat will now check if it is a perpetual check in variants
whre such is forbidden, (i.e. all but Crazyhouse). The checking side is then
rules  to lose.

22 months agoRemember ply level at which position previously occurred
H.G.Muller [Mon, 15 May 2017 12:38:54 +0000]
Remember ply level at which position previously occurred

By storing the ply level of each latest occurrence of a position,
wecan know how far back to test for perpetuals.

22 months agoEnable Knight PST in Crazyhouse
H.G.Muller [Mon, 15 May 2017 12:25:44 +0000]
Enable Knight PST in Crazyhouse

PST to encourage using Knights in attacks are enabled after move 10.
Enabling it earlier would make the engine move only Knights in the opening.

22 months agoRecord game history
H.G.Muller [Mon, 15 May 2017 12:22:51 +0000]
Record game history

All moves played at game level are remembered in the array gameMove[],
for the benefit of taking back moves.

22 months agoPrevent spoiling of castling rights on setup
H.G.Muller [Mon, 15 May 2017 12:16:56 +0000]
Prevent spoiling of castling rights on setup

The undo info is now initialized to a dummy move on a3 rather than a1,
so that the white Q-side castling rules are not immediately spoiled
through suspecting a Rook move.

22 months agoConsider extra moves in some horizon nodes
H.G.Muller [Mon, 15 May 2017 10:02:46 +0000]
Consider extra moves in some horizon nodes

The first node of QS now not only considers captures, but, if the
move leading to it was a check evasion, also check drops. In case
the previous move of the same side was a check evasion, we also try
the killers (which might have been postponed due to the need to evade),
plus check drops.

22 months agoMake assert exits dependent on DEBUG switch
H.G.Muller [Mon, 15 May 2017 09:36:28 +0000]
Make assert exits dependent on DEBUG switch

The fatal assertion violations are now only occurring in a compile that
has defined the DEBUG macro; normally action is taken to prevent the fault
the error condition would ordinarily cause.

22 months agoApply delayed-loss bonus to analogy
H.G.Muller [Mon, 15 May 2017 09:26:17 +0000]
Apply delayed-loss bonus to analogy

When we stand pat on an analogy, which usually represents the score of a
deeper search, this could be smaller than the current evaluation, and thus
deserve a delayed-loss bonus.

22 months agoReturn depth after mate-depth pruning
H.G.Muller [Mon, 15 May 2017 09:22:08 +0000]
Return depth after mate-depth pruning

The bound returned  mate-depth pruning must be accompanied by a defined

22 months agoAdd some Crazyhouse eval terms
H.G.Muller [Sun, 14 May 2017 19:34:42 +0000]
Add some Crazyhouse eval terms

Encourage development of Rooks and Bishops in Crazyhouse. Probably this term
should be disabled in other variants, but it is unlikely to trigger there.

22 months agoReduce null move less after first spite check
H.G.Muller [Sun, 14 May 2017 13:19:38 +0000]
Reduce null move less after first spite check

The null-move reduction is aken one ply less after the first (check, evasion)
pair in a branch, to prevent spite checks pushing unavoidable mates over
the null-search horizon.

22 months agoKeep analogy stack pointer
H.G.Muller [Sun, 14 May 2017 13:12:11 +0000]
Keep analogy stack pointer

This prepares for maintaining an analogy stack, for recrding suspected
spite checks at eveny (check, evasion) pair that loses material. We also
treat anaEval as a more general replacement (with wider scope) for curEval.
None of this affects the search yet.

22 months agoForbid stand-pat after checking
H.G.Muller [Sun, 14 May 2017 10:41:21 +0000]
Forbid stand-pat after checking

If the previous two ply were a check and evasion that burned material,
the stand-pat score is replaced by a (somewhat pessimistic) mated-in-50
score. This prevents pushing forced mates over the horizon by series of
spite checks.

2 years agoPut depth limit on QS
H.G.Muller [Tue, 7 Feb 2017 22:14:03 +0000]
Put depth limit on QS

To combat search explosion, QS is limited to 10 ply. This is done by
setting a globalvariable depthLimit when we enter QS. When the limit
is reached, the side to move gets an initiative bonus of 150 on top
of the static eval.

2 years agoCorrect comments in step lists
H.G.Muller [Tue, 7 Feb 2017 21:49:07 +0000]
Correct comments in step lists

The white and black Tori-Shogi Goose were swapped in the comment.

2 years agoSuppress hash cutoffs in root
H.G.Muller [Tue, 7 Feb 2017 21:39:47 +0000]
Suppress hash cutoffs in root

2 years agoImplement initiative bonus
H.G.Muller [Tue, 7 Feb 2017 21:33:53 +0000]
Implement initiative bonus

An initiative bonus is awarded to the side to move, based on seige of
the opponent King and own pieces in hand. A second attempt to stand pat
on the score including this bonus is then made.

2 years agoSet return move already when we get new PV
H.G.Muller [Tue, 7 Feb 2017 21:10:04 +0000]
Set return move already when we get new PV

Returning the move at the endof the iteration did not work if the
iteration took an early exit.

2 years agoAllow up to 1GB hash
H.G.Muller [Tue, 7 Feb 2017 20:57:25 +0000]
Allow up to 1GB hash

Previously 256MB was the maximum.

2 years agoInherit killers from before check + evasion
H.G.Muller [Tue, 7 Feb 2017 20:49:58 +0000]
Inherit killers from before check + evasion

Normally killers of the next level are cleared when we enter a new node.
But if the move reaching the new node was a check evasion, we now set them
to the killers at this evasion level, to see if those still work after a
spite check.

2 years agoReduce thinking time in Wa Shogi
H.G.Muller [Tue, 7 Feb 2017 19:53:00 +0000]
Reduce thinking time in Wa Shogi

Due to the high branching factor time was too aggressively used up in
Wa Shogi. The timeusage is now reduced by 33% to avoid time trouble.

2 years agoPrevent check evasions can become killers
H.G.Muller [Tue, 7 Feb 2017 19:28:38 +0000]
Prevent check evasions can become killers

Check evasions are tactical replies specific to the preceding moves
(as checks cannot be pre-existing), and are thus not suitable for trying
in sibbling nodes that do not check. It is even unlikely they would carry
over to other checks.

2 years agoImplement mate killers
H.G.Muller [Tue, 7 Feb 2017 19:23:12 +0000]
Implement mate killers

Moves that force mate aftera check evasion are remembered in a mateKillers
table, indexed by the preceding evasion. Such moves are tried in QS as
reply to the same evasion. This should make it more difficult to push
tsume mates over the horizon by spite checks in a hisshi situation.

2 years agoAdapt PST for small variants
H.G.Muller [Tue, 7 Feb 2017 19:09:39 +0000]
Adapt PST for small variants

In mini- and Judkins' Shogi generals now get a bonus of 30 for being
an Alfil jump away from the King corner. And the King gets abonus for
staying in its corner, and less penalty for being in front of his Pawn.

2 years agoAssign correct PST in all Shogi variants
H.G.Muller [Tue, 7 Feb 2017 19:04:42 +0000]
Assign correct PST in all Shogi variants

The available piece-square tables are now assigned dependent on the
variant, where a new variant-idexed table of strings indicates which
table goes with which piece.

2 years agoReject obviously wrong hash move
H.G.Muller [Mon, 6 Feb 2017 22:13:01 +0000]
Reject obviously wrong hash move

A move with a piece of the wrong color, or a drop of a piece not in hand
will now not be accepted as hash move, and cause the hashed in-check info
to be ignored.

2 years agoAllow only moves that beat alpha to become best move
H.G.Muller [Mon, 6 Feb 2017 22:02:30 +0000]
Allow only moves that beat alpha to become best move

In case of a fail low we don't want to sort a garbage move in front for
the next iteration.

2 years agoDo not try killers when in check
H.G.Muller [Mon, 6 Feb 2017 21:57:38 +0000]
Do not try killers when in check

Killer moves are unlikely to be check evasions. Also do not try to test
null killers for (pseudo-)legality.

2 years agoFix null move
H.G.Muller [Mon, 6 Feb 2017 21:49:19 +0000]
Fix null move

The null-move search used a null window at alpha, instead of beta.

2 years agoFix crash by input-buffer overrun
H.G.Muller [Mon, 6 Feb 2017 21:38:37 +0000]
Fix crash by input-buffer overrun

The input buffer was too small to hold Wa-Shogi FENs.

2 years agoImplement history heuristic
H.G.Muller [Mon, 6 Feb 2017 21:35:25 +0000]
Implement history heuristic

The non-captures are now sorted by history score before searching them.

2 years agoKeep track of checking history
H.G.Muller [Mon, 6 Feb 2017 21:27:05 +0000]
Keep track of checking history

An array checkHist[] records checks from the game as well as the search.

2 years agoUse CECP mate-score convention
H.G.Muller [Mon, 6 Feb 2017 19:54:09 +0000]
Use CECP mate-score convention

Mate in N is now printed as 100000+N.

2 years agoAllow e.p. capture as check evasion
H.G.Muller [Mon, 6 Feb 2017 18:24:38 +0000]
Allow e.p. capture as check evasion

The routine NonEvade, which vets move when in check before making them,
now recognizes e.p. captures (i.e. diagonal Pawn moves to an empty square)
when a Pawn is checking as a valid evasion.

2 years agoIndicate last rank in zone table
H.G.Muller [Mon, 6 Feb 2017 18:15:18 +0000]
Indicate last rank in zone table

The least-sigificant bit in the zone table is nowused to indicate first
and second rank. This is used to forbid Pawn drops as check evasions.
Which is OK for crazyhouse, but is overruled on 1st rank for Shogi.
The last-2-ranks bits are suppressed in mini-Shogi (which has no Knight).

2 years agoFix deferral
H.G.Muller [Mon, 6 Feb 2017 18:05:37 +0000]
Fix deferral

Pieces that could promote would not be allowed to defer. Which is OK for
Crazyhouse, but not for Shogi. Now only pieces that have the must-promote
ormust-promote-one-last-2-ranks flags set get their promotion suppressed
where these flags request it.