Hi everyone. I'm building a Connect 4 program and I was hoping to further improve the performance with some better move ordering.
My program implements the following:
-Bit-Boards based on Jon Tromp's design.
-NegaMax AB pruning.
-Transposition tables (Although I believe a lot of collisions are occurring).
-Iterative deepening.
-Killer heuristic.
Currently from start it can search up to a depth of 21 in 8 seconds however it does this based on very stiff move ordering. Given an array statically ordered from center to edge (see below) of every board position it will loop over and check to see if the corresponding move is open.
int orderMoves={iterate , killerMoves[depth][0], killerMoves[depth][1], 21,22,23,24,25,26,28,29,30,31,32,33,14,15,16,17,18,19,35,36,37,38,39,40,7,8,9,10,11,12,42,43,44,45,46,47,0,1,2,3,4,5};
However, no matter what I replace this with it unfortunately is always slower. One method I was considering was implementing history heuristics as it apparently offers a great speed increase for a Connect 4 engine but I am having trouble understanding how. If anyone has any knowledge and can help me out that would be great. :)