Beispiel #1
0
        private SolvedScoreNode SimulateAllLegalActions(State state)
        {
            LogState(state);
            SolvedScoreNode solved = new SolvedScoreNode();

            solved.bestAction = null;
            solved.score      = 0.0;
            solved.state      = state;
            foreach (Ability action in actions)
            {
                if (!action.CanUse(state))
                {
                    continue;
                }

                double score = SimulateActionUsed(state, action);
                if (score > solved.score)
                {
                    solved.score      = score;
                    solved.bestAction = action;
                }
            }

            solvedStates[state] = solved;
            return(solved);
        }
Beispiel #2
0
        private void LogSlowSolve(SolvedScoreNode node)
        {
            if (logWriter == null)
            {
                return;
            }

            ++lineNumber;
            LogIndents();
            if (node.bestAction == null)
            {
                logWriter.WriteLine("Node slow solved!  Score={0}, bestAction=None!", node.score);
            }
            else
            {
                logWriter.WriteLine("Node slow solved!  Score={0}, bestAction={1}", node.score, node.bestAction.Name);
            }
        }
Beispiel #3
0
        public void Run(State state)
        {
            // The base step allows us to resume a deep calculation from the middle of the tree,
            // and ensure we can still travel an *additional* MaxAnalysisDepth nodes deep from
            // an arbitrary starting point.
            this.baseStep = state.Step;

            numSlowSolved = numLeafSolved = numQuickSolved = 0;

            SolvedScoreNode solvedScore = null;

            if (solvedStates.TryGetValue(state, out solvedScore))
            {
                ++numQuickSolved;
                return;
            }

            SimulateAllLegalActions(state);
        }
Beispiel #4
0
        public Ability OptimalAction(State state)
        {
            SolvedScoreNode node = solvedStates[state];

            return(node.bestAction);
        }