public int max_value(Estado estado, int alfa, int beta) { if (cut(estado) || estado.gameIsOver()) { return(eval(estado)); } int v = Int32.MinValue; int temp; List <Jogada> jogadas = MaquinaDeRegras.PossiveisMovimentos(estado); foreach (var jogada in jogadas) { //MAX(v,min_value(result(s,a),alfa,beta)) temp = min_value(Estado.result(estado, jogada), alfa, beta); if (v < temp) { v = temp; } if (v >= beta) { return(v); } //MAX(alfa,v) if (alfa < v) { alfa = v; } } return(v); }
public Jogada alpha_beta_search(Estado estado) { int v = Int32.MinValue; int alfa = Int32.MinValue; int beta = Int32.MaxValue; List <Jogada> jogadas = MaquinaDeRegras.PossiveisMovimentos(estado); int i = 0, temp, jogadaIndex = 0; foreach (var jogada in jogadas) { //MAX(v,min_value(result(s,a),alfa,beta)) temp = min_value(Estado.result(estado, jogada), alfa, beta); if (v < temp) { v = temp; jogadaIndex = i; } if (v >= beta) { return(jogada); } //MAX(alfa,v) if (alfa < v) { alfa = v; } i++; } List <Jogada> .Enumerator e = jogadas.GetEnumerator(); for (i = 0; i < jogadaIndex + 1; i++) { e.MoveNext(); } return(e.Current); }
//fun��o de avaliacao sobre a quantidade de movimentos possiveis //retorna a qtd de movimentos possiveis public static int evalMobility(Estado estado) { List <Jogada> jogadas = MaquinaDeRegras.PossiveisMovimentos(estado); return(jogadas.Count); }