def set_matriz(self, m: int) -> None: for i in self.estados: while True: row = [] for j in range(0, m + 1): while True: number = (input(f'Ingrese p{i}{j} en k = {self.k}: ')) prob = check_float(number) if prob is not None: row.append(prob) break else: print('Valor inválido, intente de nuevo...') suma = sum(row) if not .999999 < suma < 1.000001: print('La suma de probabilidades debe ser igual a 1') continue costo = self.get_costo(i) print(f'Los valores ingresados para el estado {i} son: {row}') print( f'El costo ingresado es: {costo if self.tipo == "min" else -1 * costo}' ) if confirmacion(): break self.matriz.append(row) self.costos[f'c{i}{self.k}'] = costo
def main(): opcion = 'z' print( "*************************************************************************" ) print("* Proyecto final optimizacion II *") print( "*************************************************************************" ) print("Integrantes: ") print("\n") print("\tCabrejos Reyes Eliseo Aldair") print("\tFlores Zenteno Alfonso") print("\tMejía Maldonado José Fernando") print("\tTenorio Lugo Brandon Alexis") print("\n\n\n") input("Presione Enter para continuar...") while True: menus.menu_principal() opcion = input("¿Que desea hacer?: ") if opcion == '1': menus.menu_transporte() if opcion == '2': menus.menu_redes() if opcion == '3': menus.menu_programacion_entera() elif opcion == 'q': if confirmacion('Está saliendo del programa. ¿Está seguro?'): exit() continue
def print_ruta(self): while True: j = get_param('j', 1, self.dim) - 1 if j == self.nodo_inicial: print('*** No es necesario calcular la ruta más corta al nodo inicial. ***') else: print(f'La ruta más corta entre {self.nodo_inicial + 1} y {j + 1} pesa {self.distancias[j]} y es: ') print(self.get_ruta(j)) if not confirmacion('¿Desea calcular otra ruta?'): break
def start(self): while True: opcion = self.get_opcion() metodo = self.metodos[opcion](self.problema.m, self.problema.k, self.problema.matrices_decision, tipo=self.problema.tipo) solucion = metodo.resolver() self.mostrar_solucion(solucion) if not confirmacion('¿Desea resolver por otro método?'): break print('Saliendo del programa...')
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
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 switcher(self, opc): if opc is 1: print('La matriz del problema original es:') print_m(self.matriz_original, 1000) elif opc is 2: print('La matriz de adyacencia con los pesos calculados es:') print_m(self.matriz_pesos, 1000) elif opc is 3: print('La matriz de de las rutas es:') print_m(self.matriz_rutas) elif opc is 4: while True: i = get_param('i', 1, self.dim) - 1 j = get_param('j', 1, self.dim) - 1 print( f'La ruta más corta entre {i + 1} y {j + 1} pesa {self.matriz_pesos[i][j]} y es: ' ) print(self.calcular_ruta(i, j)) if not confirmacion('¿Desea calcular otra ruta?'): break
def resolver(self) -> Dict: self.generar_politicas() self.fill_matrices_de_politica() if confirmacion('¿Desea mostrar cada política generada?'): self.mostrar_politicas() return self.get_mejor_politica()