public void run() {
        time = System.nanoTime();
        roadDistance = 0;

        FastConvexHull fastConvexHull = new FastConvexHull();
        conjunct = fastConvexHull.execute(geoRefs);

        // Obtenemos el complemento
        geoRefs.removeAll(conjunct);

        // Listado de puntos cercanos.
        Map<GeoRef,MinimalDistance> minimalDistances = new HashMap<GeoRef, MinimalDistance>(geoRefs.size());

        // Listado de todos los puntos del complemento del convexhull con su punto más cercano al conjunct
        for (GeoRef innerPoint : geoRefs) {
            // Minima distancia que tiene el punto comparado con las paredes del conjunct
            MinimalDistance minDist = new MinimalDistance(conjunct, innerPoint);
            minimalDistances.put(innerPoint, minDist);
        }

        System.out.println("Calculados minimos iniciales. Quedan:");

        // We add the remaining points to the circuit
        for (int j = geoRefs.size(); 0 < j; j--) {

            if(j%500==0){
                System.out.print(" "+j);
            }

            MinimalDistance bestToAdd = null;
            double ratioDistance = Double.POSITIVE_INFINITY;
            double ratioDistanceAux;

            // Buscamos el punto que tiene menor distancia con el conjunct.
            for (MinimalDistance actual : minimalDistances.values()) {
                ratioDistanceAux = actual.getRatio();

                if (ratioDistanceAux < ratioDistance) {
                    ratioDistance = ratioDistanceAux;
                    bestToAdd = actual;
                }
            }

            conjunct.add(bestToAdd.getInsertionIndex() + 1, bestToAdd.getP());
            geoRefs.remove(bestToAdd.getP());

            // We need to remove it from the list because now is part of the CH
            minimalDistances.remove(bestToAdd.getP());

            updateCHCosts(minimalDistances, bestToAdd.getmPath());
        }

        roadDistance = countDistance(conjunct);
        time = System.nanoTime() - time;
        System.out.println("");
    }