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)); } }