Exemple #1
0
    public void Adapt()
    {
        //==TODO==
        //Implement mutation algorithm
        //This will need to evaluate which actions achieved the best results, then tune the decisionNode's heuristics to better suit the actions

        //Currently it just regenrates the tree to cause a tactic change
        //tree.GenerateTree(points);


        //Adapt
        List <BossSequence> sequences = memory.Read();

        for (int i = 1; i < sequences.Count - 2; i++)
        {
            if (BossHeuristic.Evaluate(sequences[i - 1]) || BossHeuristic.Evaluate(sequences[i]) || BossHeuristic.Evaluate(sequences[i + 1]))
            {
                for (int j = 0; j < sequences[i].path.Count - 1; j++)
                {
                    if (sequences[i].path[j].heuristic == BossHeuristic.Heuristic.WEIGHTED)
                    {
                        if (sequences[i].path[j].left == sequences[i].path[j + 1])
                        {
                            sequences[i].path[j].weight += WEIGHTCHANGE;
                        }
                        else
                        {
                            sequences[i].path[j].weight += WEIGHTCHANGE;
                        }
                    }
                }
            }
        }


        //Mutate
        Mutate(tree.rootNode);
    }
    //Recursively computes the correct action via flowdown of the DecisionTree.
    public BossAction Evaluate(GameData m_gameData, List <BossDecisionNode> path)
    {
        path.Add(this);

        if (BossHeuristic.Evaluate(m_gameData, heuristic, weight))
        {
            if (left.IsAction())
            {
                left.SetSequence(new BossSequence(m_gameData, path, null));
                return((BossAction)left);
            }
            return(left.Evaluate(m_gameData, path));
        }
        else
        {
            if (right.IsAction())
            {
                right.SetSequence(new BossSequence(m_gameData, path, null));
                return((BossAction)right);
            }
            return(right.Evaluate(m_gameData, path));
        }
    }