Package org.ggp.base.validator

Source Code of org.ggp.base.validator.SimulationValidator

package org.ggp.base.validator;

import java.util.List;

import org.ggp.base.util.game.Game;
import org.ggp.base.util.statemachine.MachineState;
import org.ggp.base.util.statemachine.StateMachine;
import org.ggp.base.util.statemachine.exceptions.GoalDefinitionException;
import org.ggp.base.util.statemachine.exceptions.MoveDefinitionException;
import org.ggp.base.util.statemachine.exceptions.TransitionDefinitionException;
import org.ggp.base.util.statemachine.implementation.prover.ProverStateMachine;

import com.google.common.collect.ImmutableList;

public final class SimulationValidator implements GameValidator
{
  private final int maxDepth;
  private final int numSimulations;

  public SimulationValidator(int maxDepth, int numSimulations)
  {
    this.maxDepth = maxDepth;
    this.numSimulations = numSimulations;
  }

  @Override
  public List<ValidatorWarning> checkValidity(Game theGame) throws ValidatorException {
    for (int i = 0; i < numSimulations; i++) {
      StateMachine stateMachine = new ProverStateMachine();
      stateMachine.initialize(theGame.getRules());

      MachineState state = stateMachine.getInitialState();
      for (int depth = 0; !stateMachine.isTerminal(state); depth++) {
        if (depth == maxDepth) {
          throw new ValidatorException("Hit max depth while simulating: " + maxDepth);
        }
        try {
          state = stateMachine.getRandomNextState(state);
        } catch (MoveDefinitionException mde) {
          throw new ValidatorException("Could not find legal moves while simulating: " + mde);
        } catch (TransitionDefinitionException tde) {
          throw new ValidatorException("Could not find transition definition while simulating: " + tde);
        }
      }

      try {
        stateMachine.getGoals(state);
      } catch (GoalDefinitionException gde) {
        throw new ValidatorException("Could not find goals while simulating: " + gde);
      }
    }
    return ImmutableList.of();
  }
}
TOP

Related Classes of org.ggp.base.validator.SimulationValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.