示例#1
0
 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
示例#2
0
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
示例#3
0
 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
示例#4
0
 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...')
示例#5
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
示例#6
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()
示例#7
0
 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
示例#8
0
 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()