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
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
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
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
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
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
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
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)
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()
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