Example #1
0
        /// <summary>
        /// Calculates the probability of selecting a given node
        /// </summary>
        public virtual double CalculateProbability(INode currentNode, NodeTiming nodeTiming)
        {
            var node      = nodeTiming.Node as NodeBase;
            var pheromone = PheromoneMatrix.GetValue(currentNode, node);

            double topProbability = 1.0;

            if (pheromone > 0)
            {
                if (Alpha > 0)
                {
                    topProbability *= Math.Pow(pheromone, Alpha);
                }
            }

            var routeStatistics    = _routeService.CalculateRouteStatistics(currentNode, node);
            var performanceMeasure = _objectiveFunction.GetObjectiveMeasure(routeStatistics);

            if (Beta > 0 && performanceMeasure > 0)
            {
                topProbability *= Math.Pow(1 / performanceMeasure, Beta);
            }

            if (node.Priority > 1)
            {
                ;
            }
            var priority = Math.Max(node.Priority, 1);

            if (Zeta > 0)
            {
                topProbability *= 1 + Math.Pow(Zeta, priority);
            }

            return(topProbability);
        }