public override Node MakeDecision(AgentActions agent, GameObject enemy, GameObject powerPickup, GameObject healthKit) { // The reference pointer will now call the function it was assigned to // and return a boolean of either true or false if (m_decision.Invoke(agent, enemy, powerPickup, healthKit) == true) { return(true_child); } else { return(false_child); } }
public static NodeSplit SplitByDecision(this IReadOnlyCollection <DataSetObject> dataSet, Decision decision) { var result = new Dictionary <bool, List <DataSetObject> > { [true] = new List <DataSetObject>(dataSet.Count / 2), [false] = new List <DataSetObject>(dataSet.Count / 2) }; foreach (var obj in dataSet) { result[decision.Invoke(obj)].Add(obj); } return(new NodeSplit(result[false], result[true])); }
internal override Int32 ClassifyObject(DataSetObject obj, int availableHeight) { if (availableHeight == 1) { return(DecisionResult); } availableHeight--; if (_decision.Invoke(obj)) { return(_rightChild.ClassifyObject(obj, availableHeight)); } return(_leftChild.ClassifyObject(obj, availableHeight)); }
public (DataSet left, DataSet right) SplitByDecision(Decision decision) { var result = new Dictionary <bool, Dictionary <int, List <DataSetObject> > > { [true] = new Dictionary <int, List <DataSetObject> >(ObjectCount / 2), [false] = new Dictionary <int, List <DataSetObject> >(ObjectCount / 2) }; foreach (var obj in Objects) { var decisionResult = decision.Invoke(obj); if (!result[decisionResult].ContainsKey(obj.Label)) { result[decisionResult].Add(obj.Label, new List <DataSetObject>()); } result[decisionResult][obj.Label].Add(obj); } return(new DataSet(result[true]), new DataSet(result[false])); }