public IPuzzleMove selectMove(IPuzzleState gameState) { if (rnd.NextDouble() < inertiaProbability) { List <IPuzzleMove> moves = gameState.GetMoves(); SokobanGameState state = (SokobanGameState)gameState; foreach (IPuzzleMove m in moves) { SokobanPushMove push = (SokobanPushMove)m; if (push.MoveList.Count() == 0) { return(m); } } } return(gameState.GetRandomMove()); }
public IPuzzleMove selectMove(IPuzzleState gameState) { List <IPuzzleMove> moves = gameState.GetMoves(); IPuzzleMove bestMove = null; if (rng.NextDouble() > epsilon) { IPuzzleState clone = gameState.Clone(); double maxReward = double.MinValue; List <IPuzzleMove> bestMoves = new List <IPuzzleMove>(); foreach (IPuzzleMove move in clone.GetMoves()) { clone.DoMove(move); double result = clone.GetResult(); if (result > maxReward) { bestMoves.Clear(); bestMoves.Add(move); maxReward = result; //bestMove = move; } else if (result == maxReward) { bestMoves.Add(move); } clone = gameState.Clone(); } //return bestMoves[0]; return(bestMoves[rng.Next(bestMoves.Count())]); } else { bestMove = gameState.GetRandomMove(); } return(bestMove); }
public IPuzzleMove selectMove(IPuzzleState gameState) { return(gameState.GetRandomMove()); }