private Edge getMostProbEdge(Ant ant)
        {
            Edge[] possibEdges =
                getFromTownEdges(ant.getLastVisitedTown()).
                Where(edge => !ant.isTownVisited(edge.endV)).ToArray();

            if (possibEdges.Length == 0)
            {
                return(null);
            }

            double comDiv = possibEdges.
                            Select(edge => edgePossibility(edge)).Sum();

            possibEdges = possibEdges.OrderByDescending(edge => edgePossibility(edge) / comDiv).ToArray();

            return(possibEdges.Length == 0 ? null : possibEdges[0]);
        }
        private bool tryCycleTour(Ant ant, int startV, int endV)
        {
            Edge[] eds = edges.Where(edge => edge.startV == startV && edge.endV == endV).ToArray();
            Edge   cEdge;

            if (eds.Length == 0)
            {
                return(false);
            }
            else
            {
                cEdge = eds[0];
            }

            if (cEdge == null)
            {
                return(false);
            }
            else
            {
                ant.visitCycleTown(cEdge.length);
                return(true);
            }
        }