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