/* Alternative development for introducing errors to play. * private List<PlayHint> Errorify(GameState gamestate, List<PlayHint> play_hints) * { * if (play_hints.Count <= 1) * return play_hints; * * double best_equity = play_hints[0].Equity; * * double diff = best_equity - play_hints[1].Equity; * if (diff > 0.015) * return play_hints; * * List<PlayHint> swapped = new List<PlayHint>(); * * double doubtful = 0.04; * double bad = 0.08; * double very_bad = 0.16; * * // Handle special cases like 6 or 5-prime completion, bearoff, hitting * * for (int i = 1; i < play_hints.Count; i++) * { * diff = best_equity - play_hints[i].Equity; * * } * * return swapped; * }*/ public override List <PlayHint> PlayHint(GameState gamestate, int max_hints) { Stopwatch sw = Stopwatch.StartNew(); if (gamestate.Board.IsPureRace() && gamestate.Board.IsBearoff(gamestate.PlayerOnRoll)) { List <PlayHint> play_hints = gnubg.PlayHint(gamestate, max_hints); for (int i = 0; i < play_hints.Count; i++) { bool all_bearoffs = true; foreach (Move move in play_hints[i].Play) { if (!move.IsBearOff) { all_bearoffs = false; break; } } if (all_bearoffs) { PlayHint tmp = play_hints[i]; play_hints[i] = play_hints[0]; play_hints[0] = tmp; } } Console.WriteLine("[Play Hints] " + sw.ElapsedMilliseconds + "ms."); return(play_hints); } List <PlayHint> hints = gnubg.PlayHint(gamestate, max_hints); Console.WriteLine("[Play Hints] " + sw.ElapsedMilliseconds + "ms."); return(hints); }
public override PlayHint PlayHint(GameState gamestate) { if (gamestate.Board.IsPureRace() && gamestate.Board.IsBearoff(gamestate.PlayerOnRoll)) { List <PlayHint> play_hints = gnubg.PlayHint(gamestate, 500); foreach (PlayHint play_hint in play_hints) { bool all_bearoffs = true; foreach (Move move in play_hint.Play) { if (!move.IsBearOff) { all_bearoffs = false; break; } } if (all_bearoffs) { return(play_hint); } } // Didn't find anything qualifying, just return the first. return(play_hints[0]); } Stopwatch sw = Stopwatch.StartNew(); PlayHint hint = gnubg.PlayHint(gamestate); Console.WriteLine("[Play Hint] " + sw.ElapsedMilliseconds + "ms."); return(hint); }