def ClosenessCentralityExperiment(G, min_target, max_target, filename):
    print nx.info(G)
    print 'average closeness centrality: ', UF.average_closeness_centrality(G)

    X_closeness_centrality = []
    Y_nD = []

    target = min_target
    while target <= max_target:       
        copyG = G.copy()
        new_G = SimulatedAnnealing(copyG, target, closeness_centrality_cost_function)
        closeness_centrality = UF.average_closeness_centrality(new_G)
        nD = SCT.controllability(new_G)

        X_closeness_centrality.append(closeness_centrality)
        Y_nD.append(nD)

        print "target = ", target, " ClosenessC = ", closeness_centrality, 'nD = ', nD       
        target += 0.05

    s = 'results/' + filename
    with open(s, "w") as f:
        for i in range(len(Y_nD)):
            print >> f, "%f %f"%(X_closeness_centrality[i], Y_nD[i])
    return (X_closeness_centrality, Y_nD)
def closeness_centrality_cost_function(G, target):
    return math.fabs(UF.average_closeness_centrality(G) - target)