I can think of four cases:
* This game is not progressing, it is boring lately, I agree to draw.
* I am losing badly so I happily agree to draw.
* The game is not progressing, though I'm doing very well, so I'd like to see it "not progressing" for longer before agreeing to draw.
* I'm doing badly, but this board design is so wild that scores are jumping all over the place. I refuse the draw because maybe things will work out.
The wiki "draw" article is pretty limited for the human-like aspect of this. Another challenge is that for my game ChessCraft the player can create custom pieces and boards with custom rules. So there may be many pieces, few pieces, only ultra-powerful pieces, only weak pieces, or uneven sides.
So in classic chess, you might say that being down 10 material points is terrible, but it's not necessarily so bad if there are 10 queens. Similarly, being down 2 points might be terrible in ChessCraft.
So basically I am working with score histories from my AI search. Here's a game that starts slow but white starts stomping black:
I've been considering using values like "standard deviation of first 5 scores" and "standard deviation of most recent 5 scores" and "material score of board with only white pieces" and "percentage of material score that white still has from start" etc.
So far I have a rule like:
- recentStd = standard deviation of 5 most recent scores
std = standard deviation for entire history
if (no recent captures) and (recentStd < std / 5) then agree to draw, uneventful game