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);
     }
 }
예제 #2
0
        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]));
        }
예제 #3
0
        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));
        }
예제 #4
0
        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]));
        }