コード例 #1
0
        public void Initialize(ProblemDefinition problemDefinition, string planningSimulationWorldName)
        {
            var world        = new World(planningSimulationWorldName);
            var stateManager = world.GetOrCreateSystem <StateManager>();

            world.GetOrCreateSystem <SimulationSystemGroup>().AddSystemToUpdateList(stateManager);
            var playerLoop = UnityEngine.LowLevel.PlayerLoop.GetCurrentPlayerLoop();

            ScriptBehaviourUpdateOrder.AddWorldToPlayerLoop(world, ref playerLoop);

            m_StateConverter = new PlannerStateConverter <TraitBasedObject, StateEntityKey, StateData, StateDataContext, StateManager>(problemDefinition, stateManager);

            m_Scheduler = new PlannerScheduler <StateEntityKey, ActionKey, StateManager, StateData, StateDataContext, ActionScheduler, DefaultCumulativeRewardEstimator, TerminationEvaluator, DestroyStatesJobScheduler>();
            m_Scheduler.Initialize(stateManager, new DefaultCumulativeRewardEstimator(), new TerminationEvaluator(), problemDefinition.DiscountFactor);

            m_Executor = new Match3PlanExecutor(stateManager, m_StateConverter);

            // Ensure planning jobs are not running when destroying the state manager
            stateManager.Destroying += () => m_Scheduler.CurrentJobHandle.Complete();
        }
コード例 #2
0
 public CleanExecutor(StateManager stateManager, PlannerStateConverter <TraitBasedObject, StateEntityKey, StateData, StateDataContext, StateManager> stateConverter)
 {
     m_StateManager   = stateManager;
     m_StateConverter = stateConverter;
 }