Exemplo n.º 1
0
        private List <Meta.Numerics.Complex> Urgency(List <Node> states)
        {
            List <Meta.Numerics.Complex> stateUrgency = new List <Meta.Numerics.Complex>();
            double bestValue = 0.0;
            double mean      = 0;

            foreach (Node state in states)
            {
                mean += state.Value;
                if (state.Value > bestValue)
                {
                    bestValue = state.Value;
                }
            }
            mean /= states.Count;

            foreach (Node state in states)
            {
                double iVariation = Math.Pow(state.Value - mean, 2.0) / states.Count;
                double value      = 0.0;
                if (iVariation > 0.0)
                {
                    value = (bestValue - state.Value) / (Math.Sqrt(2) * Math.Sqrt(iVariation));
                }
                Meta.Numerics.Complex erfc = 1.0 - Meta.Numerics.Functions.AdvancedComplexMath.Erf(value);
                stateUrgency.Add(erfc);
            }
            return(stateUrgency);
        }
Exemplo n.º 2
0
        private List <Meta.Numerics.Complex> Fairness(List <Meta.Numerics.Complex> urgency, List <Node> states)
        {
            Meta.Numerics.Complex siblingsSum = 0;
            for (int i = 0; i < urgency.Count; i++)
            {
                siblingsSum += states[i].VisitCount * urgency[i];
            }

            List <Meta.Numerics.Complex> fairnessValues = new List <Meta.Numerics.Complex>();

            for (int i = 0; i < urgency.Count; i++)
            {
                fairnessValues.Add(states[i].VisitCount * urgency[i] / siblingsSum);
            }
            return(fairnessValues);
        }