title: How to create a good evaluation function for a game?
body: <p>I write programs to play board game variants sometimes. The basic strategy is standard alpha-beta pruning or similar searches, sometimes augmented by the usual approaches to endgames or openings.  I've mostly played around with chess variants, so when it comes time to pick my evaluation function, I use a basic chess evaluation function.</p>
  
  <p>However, now I am writing a program to play a completely new board game.  How do I choose a good or even decent evaluation function?</p>
  
  <p>The main challenges are that the same pieces are always on the board, so a usual material function won't change based on position, and the game has been played less than a thousand times or so, so humans don't necessarily play it enough well yet to give insight.  (PS.  I considered a MoGo approach, but random games aren't likely to terminate.)</p>
  
  <p><em>Game details</em>: The game is played on a 10-by-10 board with a fixed six pieces per side.  The pieces have certain movement rules, and interact in certain ways, but no piece is ever captured.  The goal of the game is to have enough of your pieces in certain special squares on the board.  The goal of the computer program is to provide a player which is competitive with or better than current human players.</p>