IEnumerator AICycle() { if (typeAI != AIType.Montecarlo) { yield return(null); Actions act = AI.Decide(); yield return(null); myEffector.Execute(act); } else { MontecarloAI aux = (MontecarloAI)AI; aux.MontecarloDecide(currentGame.GetSnapshot()); while (!aux.Ready) { yield return(null); } #if UNITY_EDITOR if (aux.ActionToExecute == Actions.None) { Debug.LogError("ERROR EN MONTECARLO: NO SE HA OBTENIDO ACCION"); } #endif myEffector.Execute(aux.ActionToExecute); } }
/// <summary> /// Execute l'effecteur le plus approprie selon l'agent /// </summary> public void ExecuteMoves() { // Observe l’environnement CaptureSignals(); // Met A jour les croyance a partir des nouveaux fait observe et des croyances deja etablie InferenceEngine.InferenceCycle(ref _beliefs, _rules); if (_queuedActions.Count == 0) { PlanNextMove(); } Effector action = _queuedActions.Dequeue(); action.Execute(this); }
/// <summary> /// Execute l'effecteur le plus approprie selon l'agent /// </summary> /// <returns>Faux si l'agent n'a plus de mouvement</returns> public bool ExecuteAMove() { // Observe l’environnement CheckersState currentState = CaptureSignals(); // Construit l'arbre ? (Uniquement si pb de performance) // Recupere toute les actions possible // Defini le but actuel prioritaire // Pour toute les actions possible on recupere celle qui est associe a la mesure d'utilite la plus forte Effector nextMove = AlphaBetaSearch(currentState);//MinimaxDecision(currentState); // Execute le mouvement if (nextMove == null) { return(false); } nextMove.Execute(m_board); return(true); }