Author: Tord Romstad
Date: 22:28:42 03/04/04
Go up one level in this thread
On March 04, 2004 at 08:35:04, Andrew Wagner wrote: >Once again, you guys have provided a ton of useful info. Thanks so much! > >First of all, I have to apologize - I forgot to mention that I do use a history >heuristic table. Just a very simple one...if a move fails high, I increment >history(square.source, square.dest). Then I add the MVV/LA score if it's a >capturing move, and sort by the sum of those two. It sounds like you use your history heuristic table even for capture moves. This is almost certainly a bad idea. You should increment history(square.source, square.dest) only when the move is not a capture, and you should use MVV/LVA alone (without adding the value from the history table) when ordering capture moves. >I had hash tables, aspiration >windows, and null-move, but I took them out to seek if I could get my move order >% up without them. This is a good idea. It is best to keep things simple until you are sure everything works (I wish I were better at following this piece of advice myself). >As far as killer moves, what usually defines them? I haven't read much about >them. The idea is similar to the history heuristic. You keep an array of killer moves, one for each ply: move_t Killer[MAX_PLY]; Whenever a non-capturing move fails high, you set Killer[Ply] equal to the move. When ordering moves at the next node at the same ply, you search the move in Killer[Ply] directly after the hash table and capture moves, and before the remaining moves (which are ordered by the history heuristic). Most people seem to use two or three killer moves per ply, rather than just one. For some reason, more than one killer move does not help at all in my engine. I only use a single killer move per ply. Tord
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.