コード例 #1
0
ファイル: MainFrame.py プロジェクト: edgarJ91/tytus
    def __funcion_analizar():

        g.errores_lexicos.clear()
        g.errores_sintacticos.clear()

        principal.consola = ""
        principal.listaSemanticos.clear()

        entrada = my_editor.text.get('1.0', END)

        arbol = g.parse(entrada)

        if len(g.errores_lexicos) == 0:

            if len(g.errores_sintacticos) == 0:
                imprimir_consola("")
                data = principal.interpretar_sentencias(arbol, tablaSimbolos)
                #tablaSimbolos.mostrar()
                imprimir_consola(data)
                #append_consola(tablaSimbolos.mostrar_tabla())
                raiz = graficando.analizador(entrada)
                graficando.GraficarAST(raiz)
                graficando.ReporteGramatical()
            else:

                imprimir_consola('Se detectaron algunos errores sintácticos')
                append_consola('')
                append_consola(
                    'No. \t Lexema \t Tipo \t\t Fila \t Columna \t Descripción '
                )

                i = 0
                while i < len(g.errores_sintacticos):

                    append_consola(
                        str(i) + ' \t ' +
                        str(g.errores_sintacticos[i].lexema) + ' \t ' +
                        str(g.errores_sintacticos[i].tipo) + ' \t ' +
                        str(g.errores_sintacticos[i].fila) + ' \t ' +
                        str(g.errores_sintacticos[i].columna) + ' \t ' +
                        str(g.errores_sintacticos[i].descripcion) + ' ')
                    i += 1
        else:

            imprimir_consola('Se detectaron algunos errores léxicos')
            append_consola('')
            append_consola(
                'No. \t Lexema \t Tipo \t\t Fila \t Columna \t Descripción ')

            i = 0
            while i < len(g.errores_lexicos):

                append_consola(
                    str(i) + ' \t ' + str(g.errores_lexicos[i].lexema) +
                    ' \t ' + str(g.errores_lexicos[i].tipo) + ' \t ' +
                    str(g.errores_lexicos[i].fila) + ' \t ' +
                    str(g.errores_lexicos[i].columna) + ' \t ' +
                    str(g.errores_lexicos[i].descripcion) + ' ')
                i += 1
コード例 #2
0
def expectation_maximization(data, cant_clusters, iteraciones):

    puntos = abrir_archivo_array(data)
    """
     Inicializacion
     1. eleccion aleatoria de los puntos iniciales
    """
    inicial = random.sample(puntos, cant_clusters)

    #cant_clusters iniciales, generacion de kpi y demas
    clusters = [Cluster([p], len(inicial)) for p in inicial]

    #Crear una lista para guardar los puntos que vayan actualizando (inicial lista vacia)
    puntos_actualizados = [[] for i in range(cant_clusters)]
    converge = False
    limite_iteraciones = 0
    #While (los gaussianos se mueven o cambian de forma, o se alcanza el limite de iteraciones):
    while (not converge) and (limite_iteraciones <= iteraciones):
        for p in puntos:
            #paso e

            i_cluster = cluster_prob_mayor(clusters, p)  #mayor probabilidad
            puntos_actualizados[i_cluster].append(p)

        # paso m
        for i, c in enumerate(clusters):
            c.actualizar(puntos_actualizados[i], len(puntos))

        #ver por probabilidad si converge
        converge = [c.converge for c in clusters].count(False) == 0

        #guardar puntos en clusters
        limite_iteraciones += 1
        puntos_actualizados = [[] for i in range(cant_clusters)]

        print '\nIteracion %d' % limite_iteraciones
        for i, c in enumerate(clusters):

            #print 'Cluster %d:  \n \tProbabilidad = %s; \n \tMedia = %s; \n \tDesv. Estandar = %s; \n \tTotal Puntos Actuales = %s' % (
            #i + 1, str(c.pi), str(c.mean), str(c.desv_estandar), str(len(c.puntos)))
            x1, y1 = gr.generateGrid(10, -10, 10, -10, 0.025)
            gr.drawContour(
                x1,
                y1, [c.mean[0], c.mean[1]],
                [[c.desv_estandar[0], 0.2], [0.2, c.desv_estandar[1]]],
                10,
                color=lista_contour[i])
        gr.pintar_puntos(clusters, cant_clusters)

    print "+----------------------------------------------------+"
    print "         Punto perteneciente a un cluster"
    print "+----------------------------------------------------+ \n"
    x = float(input("    -> Coordenada x del punto: "))
    y = float(input("    -> Coordenada y del punto: "))
コード例 #3
0
        distanciasrutas.append(particula.distanciaruta)
        # Anadimos la particula al enjambre
        enjambre.append(particula)

    # Sacamos el indice del enjambre correspondiente a la particula
    # con menor distancia de ruta del enjambre inicial
    indicemejorparticula_ini = numpy.argmin(distanciasrutas)
    logbook.write("Mejor distancia inicial: " +
                  str(enjambre[indicemejorparticula_ini].distanciaruta))
    logbook.write("\n")
    logbook.write("\n")
    logbook.write("\n")

    p1 = enjambre[indicemejorparticula_ini]

    figura = Graficar.crear_figura()

    segmentos = Graficar.crear_lista_segmentos(
        enjambre[indicemejorparticula_ini].ruta)

    grafo_0 = Graficar.crear_grafo(Citys["Lat"], Citys["Long"])

    # Anadimos la ruta
    segmentos = Graficar.crear_lista_segmentos(
        enjambre[indicemejorparticula_ini].ruta)
    grafo = Graficar.anadir_ruta(grafo_0, segmentos)
    Graficar.dibujar(figura, grafo)

    for i in range(len(p1.ruta)):
        print(str(i) + Citys["Nombres"][p1.ruta[i]])
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コード例 #4
0
def ZERG(figura, archivodatos, tamano, itermax, numvecinos, operador_cross,
         operador_mut):

    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    #             DATOS INICIALES
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    # Variables vacias iniciales
    enjambre = []  # Lista de todas las particulas
    distanciasrutas = []  # Lista de las distancias para cada particula
    indices = list(range(tamano))  # Indices del 0 al tamano del enjambre

    # Logfile para la ejecucion
    nombrelogfile = os.path.splitext(archivodatos)[0] + datetime.datetime.now(
    ).strftime('_%H_%M_%S_%d_%m_%Y.log')

    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    #             DATOS DEL PROBLEMA
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    if operador_cross == 1:
        if operador_mut == 0:
            configuracion = "/Config1/"
        elif operador_mut == 1:
            configuracion = "/Config2/"
        elif operador_mut == 2:
            configuracion = "/Config3/"
    elif operador_cross == 2:
        if operador_mut == 0:
            configuracion = "/Config4/"
        elif operador_mut == 1:
            configuracion = "/Config5/"
        elif operador_mut == 2:
            configuracion = "/Config6/"
    elif operador_cross == 3:
        if operador_mut == 0:
            configuracion = "/Config7/"
        elif operador_mut == 1:
            configuracion = "/Config8/"
        elif operador_mut == 2:
            configuracion = "/Config9/"
    else:
        if operador_mut == 0:
            configuracion = "/Config1/"
        elif operador_mut == 1:
            configuracion = "/Config2/"
        elif operador_mut == 2:
            configuracion = "/Config3/"

    #Lectura de datos
    # Citys
    #   "Lat" - Latitud de cada ciudad
    #   "Long" - Longitud de cada ciudad
    #   "Nombres" - Nombres de cada punto. Pueden ser nombres propios o numeros simplemente

    Citys = FuncionesInicializar.leer_datos(archivodatos)

    #Calculo de distancias
    Distancias = FuncionesInicializar.calcular_distancias(
        Citys["Lat"], Citys["Long"])

    with open(
            "./logs/" + os.path.splitext(archivodatos)[0] + configuracion +
            nombrelogfile, "a") as logbook:

        funcionesLog.iniciar(logbook, operador_cross, operador_mut, tamano,
                             itermax, len(Citys["Lat"]))

        #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        #             CREACION DEL ENJAMBRE
        #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        # Vamos a generar todas las particulas iniciales
        for i in range(tamano):
            # Vecinos para cada particula con los que realizará crossovers
            indicesvecinos = random.sample(indices, numvecinos)
            # Generamos particulas iniciales
            particula = GenParticula.crear_particula(indicesvecinos,
                                                     Distancias)
            # Guardamos la distancia de la ruta de cada particula
            distanciasrutas.append(particula.distanciaruta)
            # Anadimos la particula al enjambre
            enjambre.append(particula)

        # Sacamos el indice del enjambre correspondiente a la particula
        # con menor distancia de ruta del enjambre inicial
        indicemejorparticula_ini = numpy.argmin(distanciasrutas)
        logbook.write("Mejor distancia inicial: " +
                      str(enjambre[indicemejorparticula_ini].distanciaruta))
        logbook.write("\n")
        logbook.write("\n")
        logbook.write("\n")

        # Graficamos la ruta inicial
        # etiquetas = Graficar.crear_etiquetas(Citys["Nombres"])
        #figura = Graficar.crear_figura()
        #figura.clear()
        grafo_0 = Graficar.crear_grafo(Citys["Lat"], Citys["Long"])

        # Anadimos la ruta
        segmentos = Graficar.crear_lista_segmentos(
            enjambre[indicemejorparticula_ini].ruta)
        grafo = Graficar.anadir_ruta(grafo_0, segmentos)
        Graficar.dibujar(figura, grafo_0)

        #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        #             EVOLUCION DEL ENJAMBRE
        #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        contadorestancamiento = 0
        idxbestold = -1

        tiempoini = time.time()

        # Empezamos el bucle de evolucion que nos dara la solucion al finalizar
        for i in range(itermax):
            print("Iteracion " + str(i))
            # Iteramos a lo largo del enjambre
            for j in range(len(indices)):
                #                print(j)
                # Sacamos la particula
                particulaoriginal = enjambre[j]
                # Caculamos la nueva ruta resultado de curzar y mutar
                nuevaruta = Evolucion.gen_nueva_ruta(enjambre,
                                                     particulaoriginal,
                                                     operador_cross,
                                                     operador_mut)
                # Si la nueva particula es mejor que la original, la reemplazará
                # En caso contrario la particula original se mantendrá
                nuevaparticula = GenParticula.GenParticula(
                    nuevaruta, Distancias, particulaoriginal.vecinos)

                if nuevaparticula.distanciaruta < particulaoriginal.distanciaruta:
                    enjambre[j] = nuevaparticula
                    distanciasrutas[j] = nuevaparticula.distanciaruta

            # Sacamos la mejor distancia de la iteracion
            idxbest = numpy.argmin(distanciasrutas)
            logbook.write(str(i) + "--" + str(enjambre[idxbest].distanciaruta))
            logbook.write("\n")

            # Si recibimos misma ruta optima durante más de el 15% de iteraciones - BREAK
            if idxbest == idxbestold:
                contadorestancamiento += 1
                if contadorestancamiento >= round((0.15 * itermax)):
                    print("Busqueda estancada.")
                    logbook.write("FINAL DE BUSQUEDA POR ESTANCAMIENTO")
                    logbook.write("\n")
                    break
            else:
                segmentos = Graficar.crear_lista_segmentos(
                    enjambre[idxbest].ruta)
                grafo = Graficar.anadir_ruta(grafo_0, segmentos)
                Graficar.dibujar(figura, grafo)
                contadorestancamiento = 0
                idxbestold = idxbest

        tiempofin = time.time()

        # Calculamos el tiempo de ejecucion redondeando a milisegundos
        tiempocalculo = round(tiempofin - tiempoini, 3)
        logbook.write("\n")
        logbook.write("El tiempo de búsuqeda ha sido de " +
                      str(tiempocalculo) + " segundos.")
        logbook.write("\n")
        logbook.write("\n")

        resultado = enjambre[idxbest]

        # Resultado final
        logbook.write("\n")
        logbook.write("El mejor resultado final es:")
        logbook.write("\n")
        logbook.write("\n")
        logbook.write("Distancia:  " + str(resultado.distanciaruta))
        logbook.write("\n")
        logbook.write("\n")
        logbook.write("NumVecinos:  " + str(numvecinos))
        logbook.write("\n")
        logbook.write("\n")
        logbook.write("Indices de ruta:  " + str(resultado.ruta))
        logbook.write("\n")
        logbook.write("\n")
        logbook.write("La ruta a seguir es:")
        logbook.write("\n")
        contadorbreakline = 0
        for i in range(len(resultado.ruta) - 1):
            logbook.write(Citys["Nombres"][resultado.ruta[i]] + "==>")
            contadorbreakline += 1
            # Cada 8 ciudades apuntadas, pasamos a nueva linea
            if contadorbreakline == 8:
                logbook.write("\n")
                contadorbreakline = 0

        logbook.write(Citys["Nombres"][resultado.ruta[-1]] + "==>" +
                      Citys["Nombres"][resultado.ruta[0]])
        logbook.write("\n")
        logbook.write("\n")
        logbook.write("------FINAL DEL EXPERIMENTO------")
        logbook.close()

        Graficar.guardar_figura(figura, configuracion,
                                os.path.splitext(archivodatos)[0],
                                os.path.splitext(nombrelogfile)[0])

        return
コード例 #5
0
ファイル: MainFrame.py プロジェクト: sandymerida/tytus
 def __funcion_AST():
         entrada = my_editor.text.get('1.0', END)
         raiz = graficando.analizador(entrada)
         graficando.GraficarAST(raiz)
         graficando.ReporteGramatical()
         os.startfile('arbol.jpg') 
コード例 #6
0
        print(string_evol_vict_formateado)
        string_evol_vict_formateado += "\n"
        evolucion_victorias_formateado.append(string_evol_vict_formateado)
    # Imprimr los resultados de la evolución de victorias de la AI
    print("Evolución de empates")
    for i in range(len(evolucion_empates)):
        string_evol_emp_formateado = "AI: {empatadas} / 10 => {porcentaje}%".format(
            empatadas=evolucion_empates[i],
            porcentaje=evolucion_empates[i] / 10 * 100)
        print(string_evol_emp_formateado)
        string_evol_emp_formateado += "\n"
        evolucion_empates_formateado.append(string_evol_emp_formateado)

    string_evol_vict_formateado = "La AI ganó el {porcentaje}% de las veces".format(
        porcentaje=victorias / num_partidas * 100)
    string_evol_emp_formateado = "La AI empató el {porcentaje}% de las veces".format(
        porcentaje=empates / num_partidas * 100)
    print(string_evol_vict_formateado)
    print(string_evol_emp_formateado)
    string_evol_vict_formateado += "\n"
    string_evol_emp_formateado += "\n"
    evolucion_victorias_formateado.append(string_evol_vict_formateado)
    evolucion_empates_formateado.append(string_evol_emp_formateado)
    jugador1.grabar_datos_en_disco(evolucion_victorias_formateado,
                                   directorio + "/" + "resumen_winrate.txt")
    jugador1.grabar_datos_en_disco(evolucion_empates_formateado,
                                   directorio + "/" + "resumen_tierate.txt")

    # Realizar las gráficas del winrate
    Graficar.graficar_winrate(directorio, evolucion_victorias)
コード例 #7
0
ファイル: main.py プロジェクト: Aldunate5/Diego_Aldunate
    ################################ Solve #####################################
    ampl.solve()

    ############################# Variables ############################

    produccion = ampl.getVariable('P').getValues().toPandas()
    produccion_df = Generar_Dataframe.Anexo_tiempo(produccion['P.val'],
                                                   simulacion, produccion_df)
    Generar_Dataframe.Indexar(produccion_df, 'produccion')

    inventario = ampl.getVariable('W').getValues().toPandas()
    inventario_df = Generar_Dataframe.Anexo_tiempo_tiempo(
        inventario['W.val'], simulacion, inventario_df)
    Generar_Dataframe.Indexar(inventario_df, 'inventario')

    ############################ Funcion Objetivo #######################
    fo = ampl.getObjective('FO').value()
    funcion_objetivo.append((fo, simulacion + 1))

#print(funcion_objetivo)
#print(hold_df)
#print(produccion_df,inventario_df)
Prod_Cuarto, Prod_Entero, Prod_Medio, Prod_Octavo, Prod_Cuarto_t, Prod_Entero_t, Prod_Medio_t, Prod_Octavo_t = Variables.prod(
    produccion_df)
#Graficar.funcion_objetivo(funcion_objetivo,rango)
#Graficar.funcion_objetivo_hold(funcion_objetivo,hold_df,rango)
#print(Prod_Cuarto)
Graficar.produccion(Prod_Cuarto, Prod_Entero, Prod_Medio, Prod_Octavo,
                    Prod_Cuarto_t, Prod_Entero_t, Prod_Medio_t, Prod_Octavo_t,
                    rango)
コード例 #8
0
# -*- coding: utf-8 -*-
"""
Created on Mon Dec  3 19:52:43 2018

@author: igarc
"""

import main
import Graficar

# Input de datos
#archivos = ["autonomicas", "mundiales","berlin52.txt","ch130.txt","ch150.txt","PoblacionesSpa.txt"]
archivos = ["ch150.txt"]
archivodatos = archivos[0]

figura = Graficar.crear_figura()

# Tamnos de enjambres
tamanos = [40, 100, 250, 500]
#tamano = 200

# Numero maximo de iteraciones
iteraciones = [100, 200, 500, 1000]
#itermax = 1000

# Numero de vecinos entre particulas
numerodevecinos = [3, 5, 10]  # Numero de vecinos para cada particula
#numvecinos = 3

# Operadores de crossover
# 1=Order1 // 2=Cycle // 3=PMX