Copy-Make

toc
 * Home * Chess * Position * Copy-Make**

While traversing a Search Tree, the **Copy-Make** approach keeps and updates local copies of certain aspects of a chess position inside an array indexed by ply, which could also be interpreted as explicit, random accessible search stack. It usually refers the irreversible aspects of the position, like ep state, castling rights and the halfmove clock, which can not incrementally updated during unmake move. Some programs even keep reversible stuff inside an array, to avoid incremental update during unmake. Copy-Make is required, if aspects need to be accessed randomly in the current branch from the root (or even starting game position) to the current one.

=Copy-Make= code format="cpp" // make memcpy (&position[ply+1].irrvrsAspects,        &position[ply  ].irrvrsAspects,         sizeof(irrvrsAspects)); ply++; update (position[ply], move) ... // unmake ply--; // position[ply] is still valid code

=Stack= The alternative, to maintain those irreversible aspects inside a global structure, would require a stack ([|LIFO]), with push and global update during make, and pop from stack to global structure during unmake, and therefor higher memory bandwidth for copying back and forth. code format="cpp" // make push (position.irreversibleAspects); ply++; update (position, move) ... // unmake ply--; pop (position.irreversibleAspects); // position is restored from stack code

=See also=
 * Encoding Moves
 * Incremental Updates
 * Make Move
 * Unmake Move

=Forum Posts=

1995 ...
> [|Re: cheaper search ?] by Shaun Press, rgcc, April 28, 1997 » Vanilla Chess, KnightCap
 * [|cheaper search ?] by James F. Long, rgcc, April 27, 1997 » Tristram
 * [|Unmake move v copy the board] by Hugh Cumper, CCC, January 24, 1999

2000 ...
> [|Re: undo move vs. Position Cloning] by Marco Costalba, CCC, September 16, 2009 » Stockfish > [|Re: undo move vs. Position Cloning] by Don Dailey, CCC, September 16, 2009 » Doch
 * [|The need to unmake move] by Mathieu Pagé, CCC, August 19, 2003 » Unmake Move
 * [|undo move vs. Position Cloning] by BoldReceiver, CCC, September 16, 2009
 * [|copy/make vs make/unmake test results] by Robert Hyatt, CCC, September 19, 2009 » Crafty

2010 ...

 * [|Copy Board vs Unmake Move] by ChrisJ, OpenChess Forum, September 29, 2010
 * [|performance of copy-make] by Rein Halbersma, CCC, August 02, 2011
 * [|How costly is taking moves back ?] by Piotr Lopusiewicz, CCC, April 30, 2013
 * [|Saving info before making a move] by CDaley11, OpenChess Forum, December 30, 2013
 * [|copy/make vs make/unmake] by Robert Hyatt, CCC, January 07, 2014
 * [|Memory usage in make/unmake vs logic complexity] by Matthew Lai, CCC, August 30, 2014

2015 ...

 * [|Unifying make/undo and copy-make] by Rein Halbersma, CCC, December 21, 2015
 * [|Copy-make vs Make/Unmake ?] by Mahmoud Uthman, CCC, November 12, 2016

=What links here?= include page="Copy-Make" component="backlinks" limit="40"
 * Up one Level**