def main():

    conf_file, nome_base = inicio.lerArquivoConfig()
    matrizes, text, mapa_x, mapa_y, repeticoes, q, t_min, t_max, n_iter, individuals_objects, classes_a_priori = config.config(
        conf_file
    )
    filename_result, filename_individuos, resultado, file_individuos = inicio.criaArquivos(
        conf_file, nome_base, text, mapa_x, mapa_y, repeticoes, t_max, n_iter, ""
    )

    text = []

    # soma_dissimilaridades = []
    # for obj1 in individuals_objects:
    # for obj2 in individuals_objects:
    # soma_dissimilaridades.append(sum(matrizes[:,obj1.indice,obj2.indice]))

    # soma_dissimilaridades = np.array(soma_dissimilaridades).reshape(len(individuals_objects), len(individuals_objects))

    criterios_energia = []
    # oercs = []

    c = mapa_x * mapa_y

    for a in range(repeticoes):

        # Etapa de inicialização

        text.append("\n\n#####################################")
        text.append("\nRepetição do experimento: " + str(a) + "\n")

        print "Repetição ", a
        print "..."

        # Inicialização
        T = t_max
        t = 0.0
        denom = 2.0 * math.pow(T, 2)
        mapa = inicializacao(c, q, mapa_x, mapa_y, t_min, t_max, denom, matrizes, individuals_objects, nome_base, a)

        # Iterações
        while T > t_min:
            # while t < (n_iter - 1):
            # Step 1: computation of the best prototypes
            t += 1.0
            T = t_max * math.pow((t_min / t_max), (t / (n_iter - 1.0)))
            denom = 2.0 * math.pow(T, 2)

            mapa.atualiza_prototipo(denom, matrizes, q, mapa.calcula_prototipo_batch)

            # Step 2: definition of the best partition

            mapa.atualiza_particao(denom, matrizes, mapa.calcula_criterio_batch)

        no_clusters_completos = 0

        # Imprime os clusters finais
        text.extend(imprime_clusters(mapa))

        no_clusters_completos = 0
        for cluster in mapa.mapa.flat:
            if len(cluster.objetos) > 0:
                no_clusters_completos += 1

        energia = mapa.calcula_energia_batch(matrizes, T)
        criterios_energia.append(energia)

        text.append("\n\nCritério de adequação (energia): " + str(energia))

        texto = calcula_indices(mapa, classes_a_priori, no_clusters_completos, adap=False)
        # oercs.append(oerc)
        text.extend(texto)

        resultado = open(filename_result, "a")
        resultado.writelines(text)
        resultado.close()
        text = []

        list_individuos = []
        list_individuos.append("\n\n#####################################")
        list_individuos.append("\n# Repetição do experimento: " + str(a) + "\n")

        for ind in mapa.objetos:
            list_individuos.append(
                str(ind.nome) + "  " + str(ind.classe_a_priori.indice) + "  " + str(ind.cluster.indice) + "\n"
            )

        file_individuos = open(filename_individuos, "a")
        file_individuos.writelines(list_individuos)
        file_individuos.close()

    texto = imprime_indices_finais(criterios_energia)
    text.extend(texto)

    #        menor_criterio_energia = min(criterios_energia)
    #        media_criterios = np.mean(criterios_energia)
    #        #menor_erro = min(oercs)
    #        desvio_padrao = np.std(criterios_energia)
    #        text.append("\n\nMelhor repetição: " + str(criterios_energia.index(menor_criterio_energia)))
    #        #text.append("\nMenor oerc: " + str(oercs.index(menor_erro)))
    #        text.append("\nM�dia dos crit�rios: %s" % media_criterios)
    #        text.append("\nDesvio padr�o: %s" % desvio_padrao)

    resultado = open(filename_result, "a")
    resultado.writelines(text)
    resultado.close()

    print "Fim do experimento."
def main():
#        conf_file = sys.argv[1]
#        nome_base = sys.argv[2]

        conf_file, nome_base = inicio.lerArquivoConfig()
        matrizes, text, mapa_x, mapa_y, repeticoes, q, t_min, t_max, n_iter, individuals_objects, classes_a_priori = config.config(conf_file)
        filename_result, filename_individuos, resultado, file_individuos = inicio.criaArquivos(conf_file, nome_base, text, mapa_x, mapa_y, repeticoes, t_max, n_iter, "_adaptativo")

        text = []
#        text.append("\n*Modelo adaptativo")

        criterios_energia = []
#        oercs = []

        c = mapa_x * mapa_y

        for a in range(repeticoes):

                #Etapa de inicialização
                text.append("\n\n#####################################")
                text.append("\n# Repetição do experimento: " + str(a) + "\n")

                print "Repetição ", a
                print "..."

                #Inicialização
                T = t_max
                t = 0.0
                denom = 2. * pow(T,2)
                mapa = inicializacao(c, q, mapa_x, mapa_y, t_min, t_max, denom, matrizes, individuals_objects, nome_base, a)

                while T > t_min:
                # while t < (n_iter - 1):
                        #Step 1: computation of the best prototypes
                        t += 1.0
                        print 'Iteração', t
                        T = t_max * pow( (t_min / t_max), (t / (n_iter - 1.0)) )
                        denom = 2. * pow(T,2)

                        mapa.atualiza_prototipo(denom, matrizes, q, mapa.calcula_prototipo_adaptativo)

                        #Step 2: computation of the best weights
                        mapa.atualiza_pesos(denom, matrizes)

                        #Step 3: definition of the best partition
                        mapa.atualiza_particao(denom, matrizes, mapa.calcula_criterio_adaptativo)

                #Imprime os clusters finais
                text.extend(imprime_clusters(mapa))

                no_clusters_completos = 0
                for cluster in mapa.mapa.flat:
                        if len(cluster.objetos) > 0:
                                no_clusters_completos += 1

                energia = mapa.calcula_energia_adaptativo(matrizes, T)
                criterios_energia.append(energia)

                text.append("\n\nCritério de adequação (energia): " + str(energia))

                texto = calcula_indices(mapa, classes_a_priori, no_clusters_completos)
#                oercs.append(oerc)
                text.extend(texto)

                resultado = open(filename_result, 'a')
                resultado.writelines(text)
                resultado.close()
                text = []

                list_individuos = []
                list_individuos.append("\n\n#####################################")
                list_individuos.append("\n# Repetição do experimento: " + str(a) + "\n")

                for ind in mapa.objetos:
                        list_individuos.append(str(ind.nome) + "  " + str(ind.classe_a_priori.indice) + "  " + str(ind.cluster.indice) + "\n")

                file_individuos = open(filename_individuos, 'a')
                file_individuos.writelines(list_individuos)
                file_individuos.close()

                #mapa_graph.plot_graph(mapa)


        texto = imprime_indices_finais(criterios_energia)
        text.extend(texto)
#        criterios_ordenados = sorted(criterios_energia)
#        it = 0
##        while(criterios_ordenados[it] < 1.0):
##                it += 1
#
#        #menor_criterio_energia = min(criterios_energia)
#        menor_criterio_energia = criterios_ordenados[it]
#        menor_erro = min(oercs)
#        media_criterios = np.mean(criterios_energia)
#        text.append("\n\nMelhor repetição: " + str(criterios_energia.index(menor_criterio_energia)))
#        text.append("\nMenor oerc: " + str(oercs.index(menor_erro)))
#        text.append("\nM�dia dos crit�rios: %s" % media_criterios)

        resultado = open(filename_result, 'a')
        resultado.writelines(text)
        resultado.close()

        print "Fim do experimento."
def main():

    conf_file, nome_base = inicio.lerArquivoConfig()
    matrizes, text, mapa_x, mapa_y, repeticoes, q, t_min, t_max, n_iter, individuals_objects, classes_a_priori = config.config(
        conf_file
    )
    filename_result, filename_individuos, resultado, file_individuos = inicio.criaArquivos(
        conf_file, nome_base, text, mapa_x, mapa_y, repeticoes, t_max, n_iter, "_fuzzy"
    )

    text = []

    criterios_energia = []
    oercs = []

    c = mapa_x * mapa_y

    for a in range(repeticoes):

        # Etapa de inicialização

        text.append("\n\n#####################################")
        text.append("\nRepetição do experimento: " + str(a) + "\n")

        print "Repetição ", a
        print "..."

        # Inicialização
        T = t_max
        t = 0.0
        denom = 2.0 * math.pow(T, 2)
        mapa = inicializacao(c, q, mapa_x, mapa_y, t_min, t_max, denom, matrizes, individuals_objects)

        # Iterações
        while T > t_min:
            # while t < (n_iter - 1):
            # Step 1: computation of the best prototypes
            t += 1.0
            T = t_max * math.pow((t_min / t_max), (t / (n_iter - 1.0)))
            denom = 2.0 * math.pow(T, 2)

            mapa.atualiza_prototipo(denom, matrizes, q, mapa.calcula_prototipo_fuzzy)

            # Step 2: definition of the best fuzzy partition

            mapa.atualiza_pertinencias(denom, matrizes)

            # Step 3: definition of the best partition
            mapa.atualiza_particao(denom, matrizes, mapa.calcula_criterio_fuzzy)

        no_clusters_completos = 0

        # Imprime os clusters finais
        text.extend(imprime_clusters(mapa))

        no_clusters_completos = 0
        for cluster in mapa.mapa.flat:
            if len(cluster.objetos) > 0:
                no_clusters_completos += 1

        energia = mapa.calcula_energia_fuzzy(matrizes, T)
        criterios_energia.append(energia)

        text.append("\n\nCritério de adequação (energia): " + str(energia))

        text.extend(imprime_pertinencias(mapa))

        texto, oerc = calcula_indices(mapa, classes_a_priori, no_clusters_completos, adap=False)
        oercs.append(oerc)
        text.extend(texto)

        resultado = open(filename_result, "a")
        resultado.writelines(text)
        resultado.close()
        text = []

        list_individuos = []
        list_individuos.append("\n\n#####################################")
        list_individuos.append("\n# Repetição do experimento: " + str(a) + "\n")

        for ind in mapa.objetos:
            list_individuos.append(
                str(ind.nome) + "  " + str(ind.classe_a_priori.indice) + "  " + str(ind.cluster.indice) + "\n"
            )

        file_individuos = open(filename_individuos, "a")
        file_individuos.writelines(list_individuos)
        file_individuos.close()

    menor_criterio_energia = min(criterios_energia)
    menor_erro = min(oercs)
    text.append("\n\nMelhor repetição: " + str(criterios_energia.index(menor_criterio_energia)))
    text.append("\nMenor oerc: " + str(oercs.index(menor_erro)))

    resultado = open(filename_result, "a")
    resultado.writelines(text)
    resultado.close()

    print "Fim do experimento."