示例#1
0
def menu_ingresar_matriz_costos(msg: str = "TRANSPORTE", ppl: bool = False):
    while True:
        clear_screen()

        matriz = None
        objeto = 'un PPL' if ppl else 'una matriz'
        extension = 'JSON' if ppl else 'csv'
        print(f'PROBLEMAS DE {msg}')
        print("Opciones para ingresar datos:")
        print(f"1) Ingresar {objeto} manualmente")
        print(f"2) Ingresar {objeto} desde un archivo {extension}")
        print("q) Regresar al menú anterior.")

        while True:
            opcion = input('¿Qué desea hacer?: ')
            if opcion == 'q' or (check_int(opcion) is not None
                                 and 0 < check_int(opcion) <= 2):
                break
            else:
                print('Ingrese una opción válida...')
        if opcion == '1':
            matriz = datos.ingresar_ppl_manualmente(
            ) if ppl else datos.ingresar_matriz_manualmente()
        elif opcion == '2':
            matriz = datos.ingresar_ppl_json(
            ) if ppl else datos.ingresar_matriz_csv()
        elif opcion == 'q':
            matriz = 0
        if matriz is not None:
            return matriz
示例#2
0
 def get_k(self, e: int):
     ks = self.posibles_k_para_e(e)
     while True:
         k = check_int(input(f'Ingrese k para el estado {e}: '))
         if (k is not None and (k in ks) and check_index(
                 e, self.matrices_decision[k].estados) is not None):
             break
         print('Opción inválida, intente de nuevo...')
         print(f'Las posibles k para el estado {e} son: ', ks)
     return k
 def get_opc(cls) -> int:
     while True:
         print('\nOpciones:')
         print('\t1) Ver condiciones iniciales')
         print('\t2) Ver solución final')
         print('\t3) Salir del método')
         opc = check_int(input('¿Qué desea hacer a continuación?: '))
         if opc is not None and opc < 4:
             break
         else:
             print('Por favor ingrese un número entero válido...')
     return opc
示例#4
0
def ingresar_ppl_manualmente() -> Tuple:
    while True:
        num_var = check_int(input('Ingrese el número de variables: '))
        if num_var is not None and num_var > 0:
            break
        else:
            print('Ingrese un número entero mayor a 0...')
    z, tipo_ppl, binario = get_z_ppl(num_var)
    print('Sea n el número de restricciones...')
    n = get_param('n', 1)
    restricciones, lado_derecho = get_restricciones_ppl(n, num_var)
    return z, tipo_ppl, restricciones, lado_derecho, binario
示例#5
0
 def get_opc(self) -> int:
     while True:
         print('\nOpciones:')
         print(f'\t1) Ver costos desde nodo {self.nodo_inicial + 1}')
         print(f'\t2) Calcular ruta de nodo {self.nodo_inicial + 1} a j')
         print('\t3) Encontrar mejor ruta para otro nodo')
         print('\t4) Salir del método')
         opc = check_int(input('¿Qué desea hacer a continuación?: '))
         if opc is not None and opc < 5:
             break
         else:
             print('Por favor ingrese un número entero válido...')
     return opc
示例#6
0
 def get_opc(cls) -> int:
     while True:
         print('\nOpciones:')
         print('\t1) Ver matriz de costos original')
         print('\t2) Ver matriz de costos final')
         print('\t3) Ver matriz de rutas')
         print('\t4) Calcular ruta de i a j')
         print('\t5) Salir del método')
         opc = check_int(input('¿Qué desea hacer a continuación?: '))
         if opc is not None and opc <= 5:
             break
         else:
             print('Por favor ingrese un número entero válido...')
     return opc
示例#7
0
def menu_ingresar_transporte(asignacion: bool = False):
    if asignacion:
        problema = "ASIGNACION"
    else:
        problema = "TRANSPORTE"
    print(f'PROBLEMA DE {problema}')
    print("Opciones para ingresar datos:")
    print(f"1) Ingresar problema manualmente")
    print(f"2) Ingresar problema desde archivos csv")
    print("q) regresar al menú anterior.")

    while True:
        opcion = input('¿Qué desea hacer?: ')
        if opcion == 'q' or (check_int(opcion) is not None
                             and 0 < check_int(opcion) <= 2):
            break
        else:
            print('Ingrese una opción válida...')
    if opcion == '1' and not asignacion:
        matriz_costos, oferta, demanda, nombres_origen, nombres_destino = datos.ingresar_transporte_manualmente(
        )
    elif opcion == '1' and asignacion:
        matriz_costos, nombres_origen, nombres_destino = datos.ingresar_asignacion_manualmente(
        )
    elif opcion == '2' and not asignacion:
        matriz_costos, oferta, demanda, nombres_origen, nombres_destino = datos.ingresar_transporte_csv(
        )
    elif opcion == '2' and asignacion:
        matriz_costos, nombres_origen, nombres_destino = datos.ingresar_asignacion_csv(
        )
    elif opcion == 'q':
        return None

    if asignacion:
        return matriz_costos, nombres_origen, nombres_destino
    else:
        return matriz_costos, oferta, demanda, nombres_origen, nombres_destino
示例#8
0
def menu_ingresar_red():
    print(f'PROBLEMA DE REDES POR SIMPLEX')
    print("Opciones para ingresar datos:")
    print(f"1) Ingresar red manualmente")
    print(f"2) Ingresar red desde archivos csv")
    print("q) regresar al menú anterior.")

    while True:
        opcion = input('¿Qué desea hacer?: ')
        if opcion == 'q' or (check_int(opcion) is not None
                             and 0 < check_int(opcion) <= 2):
            break
        else:
            print('Ingrese una opción válida...')
    if opcion == '1':
        matriz_adyacencia, matriz_costos, capacidades, nombres = datos.ingresar_red_manualmente(
        )
    elif opcion == '2':
        matriz_adyacencia, matriz_costos, capacidades, nombres = datos.ingresar_red_csv(
        )
    elif opcion == 'q':
        return 0, 0, 0

    return matriz_adyacencia, matriz_costos, capacidades, nombres
示例#9
0
 def get_opcion(cls) -> str:
     clear_screen()
     print(
         'Seleccione el método que desea emplear para resolver el problema:'
     )
     print('\t1) Enumeración exahustiva de políticas')
     print('\t2) Solución por programación lineal')
     print('\t3) Método de mejoramiento de políticas')
     print('\t4) Método de mejoramiento de políticas con descuento')
     print('\t5) Método de aproximaciones sucesivas')
     while True:
         opc = check_int(
             input('Ingrese el número del método que desea emplear: '))
         if opc is None or opc > 5 or opc < 1:
             print('Por favor ingrese un número entre 1 y 5')
         else:
             break
     return str(opc)
示例#10
0
def menu_programacion_entera():
    while True:
        ppl_ingresado = menu_ingresar_matriz_costos('PROGRAMACIÓN ENTERA',
                                                    True)
        if ppl_ingresado is None:
            continue
        if ppl_ingresado is 0:
            return
        else:
            break
    while True:
        clear_screen()
        print("METODOS PARA PROBLEMAS DE PROGRAMACIÓN ENTERA")
        print("¿Qué método desea utilizar?:")
        print("1) Resolver por Branch and Bound")
        print("2) Resolver por enumeración implícita (sólo binario)")
        print("m) Utilizar otro ppl")
        print("q) Regresar al menu anterior")

        opc = input('¿Qué desea hacer?: ')
        if opc == 'q':
            break
        elif opc == 'm':
            ppl_ingresado = menu_ingresar_matriz_costos(
                'PROGRAMACIÓN ENTERA', True)
            continue
        num = check_int(opc)
        if num is not None and num < 3:
            z, tipo_ppl, restricciones, lado_derecho, binario = ppl_ingresado
            if num == 2 and not binario:
                print(
                    '** Escogió enumeración implícita, pero el problema no es binario... **'
                )
                print(
                    '** Si continua se resolverá como un problema binario. **')
                print('** Si desea otro metodo, escoja no continuar. **')
                if confirmacion('¿Desea resolver como problema binario?'):
                    binario = True
                else:
                    continue
            switcher_metodos_entera[opc](z, tipo_ppl, restricciones,
                                         lado_derecho, binario).menu()
示例#11
0
 def get_disponible(self, k: int) -> List:
     while True:
         n = input(
             f'Seleccione el número de estados posibles para la decisión k = {k}: '
         )
         n = check_int(n)
         if n is None or not 0 < n < self.m + 2:
             print(f'Ingrese un número entero entre 1 y {self.m + 1}...')
         elif confirmacion('¿Los datos ingresados son correctos?'):
             break
     while True:
         if n == self.m + 1:
             return [x for x in range(0, self.m + 1)]
         disponible = []
         print('Ahora, ingrese los estados posibles: ')
         while len(disponible) < n:
             e = int(input('Estado disponible: '))
             disponible.append(e)
         if confirmacion('¿Los datos ingresados son correctos?'):
             break
     disponible.sort()
     return disponible