def prueba_reinas(n, metodo, tipo=1, traza=False): """ Prueba una gráfica de restricciones o mínimos conflictos para resolver n reinas. @param metodo: Cadena que indica qué método probar. Puede ser "grafo" para gráficas de restricción o "minimos" para mínimos conflictos. @param tipo: Tipo de consistencia. Solo aplica para gráficas de restricción. @param traza: Indica si se imprime la traza de la asignación parcial. Solo aplica para gráficas de restricción. """ print("\n" + '-' * 20 + '\n Para {} reinas\n'.format(n) + '_' * 20) g_r = Nreinas(n) if metodo == "grafo": t_inicial = time() asignacion = csp.asignacion_grafo_restriccion(g_r, ap={}, consist=tipo, traza=traza) t_final = time() elif metodo == "minimos": t_inicial = time() asignacion = csp.min_conflictos(g_r) t_final = time() else: raise ValueError("El método especificado no existe.") if asignacion is not None: if n < 20: Nreinas.muestra_asignacion(asignacion) else: print([asignacion[i] for i in range(n)]) print("Se realizaron {} backtrackings.".format(g_r.backtracking)) print("Y tardó {} segundos.".format(t_final - t_inicial)) else: print("El algoritmo falló.") print("Y tardó {} segundos en fallar.".format(t_final - t_inicial))
# Una forma de verificar si el código que escribiste es correcto # es verificando que la solución sea satisfactoria para estos dos # sudokus. # ========================================================================= s1 = [ 0, 0, 3, 0, 2, 0, 6, 0, 0, 9, 0, 0, 3, 0, 5, 0, 0, 1, 0, 0, 1, 8, 0, 6, 4, 0, 0, 0, 0, 8, 1, 0, 2, 9, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 6, 7, 0, 8, 2, 0, 0, 0, 0, 2, 6, 0, 9, 5, 0, 0, 8, 0, 0, 2, 0, 3, 0, 0, 9, 0, 0, 5, 0, 1, 0, 3, 0, 0 ] imprime_sdk(s1) print("Solucionando un Sudoku dificil") sudoku1 = Sudoku(s1) sol1 = csp.asignacion_grafo_restriccion(sudoku1, consist=2) imprime_sdk(sol1) s2 = [ 4, 0, 0, 0, 0, 0, 8, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 0, 7, 0, 5, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0 ] imprime_sdk(s2) sudoku2 = Sudoku(s2) print("Y otro tambien dificil") sol2 = csp.asignacion_grafo_restriccion(sudoku2, consist=2) imprime_sdk(sol2)
# Una forma de verificar si el código que escribiste es correcto # es verificando que la solución sea satisfactoria para estos dos # sudokus. # ========================================================================= s1 = [ 0, 0, 3, 0, 2, 0, 6, 0, 0, 9, 0, 0, 3, 0, 5, 0, 0, 1, 0, 0, 1, 8, 0, 6, 4, 0, 0, 0, 0, 8, 1, 0, 2, 9, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 6, 7, 0, 8, 2, 0, 0, 0, 0, 2, 6, 0, 9, 5, 0, 0, 8, 0, 0, 2, 0, 3, 0, 0, 9, 0, 0, 5, 0, 1, 0, 3, 0, 0 ] imprime_sdk(s1) print("Solucionando un Sudoku dificil") sudoku1 = Sudoku(s1) sol1 = csp.asignacion_grafo_restriccion(sudoku1) imprime_sdk(sol1) s2 = [ 4, 0, 0, 0, 0, 0, 8, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 0, 7, 0, 5, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0 ] imprime_sdk(s2) sudoku2 = Sudoku(s2) print("Y otro tambien dificil") sol2 = csp.asignacion_grafo_restriccion(sudoku2) imprime_sdk(sol2)
# es verificando que la solución sea satisfactoria para estos dos # sudokus. # ========================================================================= s1 = [ 0, 0, 3, 0, 2, 0, 6, 0, 0, 9, 0, 0, 3, 0, 5, 0, 0, 1, 0, 0, 1, 8, 0, 6, 4, 0, 0, 0, 0, 8, 1, 0, 2, 9, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 6, 7, 0, 8, 2, 0, 0, 0, 0, 2, 6, 0, 9, 5, 0, 0, 8, 0, 0, 2, 0, 3, 0, 0, 9, 0, 0, 5, 0, 1, 0, 3, 0, 0 ] #imprime_sdk(s1) print("Solucionando un Sudoku dificil") sudoku1 = Sudoku(s1) sol1 = csp.asignacion_grafo_restriccion(sudoku1, ap={}, consist=2) #imprime_sdk(sol1) s2 = [ 4, 0, 0, 0, 0, 0, 8, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 0, 7, 0, 5, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0 ] d1 = [ 6, 0, 0, 0, 0, 8, 9, 4, 0, 9, 0, 0, 0, 0, 6, 1, 0, 0, 0, 7, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 8, 9, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 3, 0, 8, 0, 0, 0, 0, 1, 6, 0, 0 ]
# Una forma de verificar si el código que escribiste es correcto # es verificando que la solución sea satisfactoria para estos dos # sudokus. # ========================================================================= s1 = [ 0, 0, 3, 0, 2, 0, 6, 0, 0, 9, 0, 0, 3, 0, 5, 0, 0, 1, 0, 0, 1, 8, 0, 6, 4, 0, 0, 0, 0, 8, 1, 0, 2, 9, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 6, 7, 0, 8, 2, 0, 0, 0, 0, 2, 6, 0, 9, 5, 0, 0, 8, 0, 0, 2, 0, 3, 0, 0, 9, 0, 0, 5, 0, 1, 0, 3, 0, 0 ] imprime_sdk(s1) print("Solucionando un Sudoku dificil") sudoku1 = Sudoku(s1) sol1 = csp.asignacion_grafo_restriccion(sudoku1, ap={}) imprime_sdk(sol1) s2 = [ 4, 0, 0, 0, 0, 0, 8, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 0, 7, 0, 5, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0 ] imprime_sdk(s2) sudoku2 = Sudoku(s2) print("Y otro tambien dificil") sol2 = csp.asignacion_grafo_restriccion(sudoku2, ap={}) imprime_sdk(sol2)
9, 0, 0, 5, 0, 1, 0, 3, 0, 0, ] print "Solucionando un Sudoku dificil" sudoku1 = Sudoku(s1) sudoku1.imprime_sdk(s1) sol1 = csp.asignacion_grafo_restriccion(sudoku1, ap={}, consist=1) sudoku1.imprime_sdk(sol1) s2 = [ 4, 0, 0, 0, 0, 0, 8, 0, 5, 0, 3, 0,
s1 = [0, 0, 3, 0, 2, 0, 6, 0, 0, 9, 0, 0, 3, 0, 5, 0, 0, 1, 0, 0, 1, 8, 0, 6, 4, 0, 0, 0, 0, 8, 1, 0, 2, 9, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 6, 7, 0, 8, 2, 0, 0, 0, 0, 2, 6, 0, 9, 5, 0, 0, 8, 0, 0, 2, 0, 3, 0, 0, 9, 0, 0, 5, 0, 1, 0, 3, 0, 0] print "Solucionando un Sudoku dificil" sudoku1 = Sudoku(s1) sudoku1.imprime_sdk(s1) # sol1 = csp.solucion_CSP_bin(sudoku1) sol1 = csp.asignacion_grafo_restriccion(sudoku1, consist = 2) sudoku1.imprime_sdk(sol1) s2 = [4, 0, 0, 0, 0, 0, 8, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 0, 7, 0, 5, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0] print "Y otro tambien dificil"
def prueba_reinas(n, metodo): print("\n" + '-' * 20 + '\n Para {} reinas\n'.format(n) + '_' * 20) g_r = Nreinas(n) asignación = metodo(g_r) if n < 20: Nreinas.muestra_asignación(asignación) else: print([asignación[i] for i in range(n)]) print("Y se realizaron {} backtrackings".format(g_r.backtracking)) if __name__ == "__main__": # Utilizando 1 consistencia prueba_reinas( 4, lambda gr: csp.asignacion_grafo_restriccion(gr, consist=1, traza=True)) prueba_reinas( 8, lambda gr: csp.asignacion_grafo_restriccion(gr, consist=1, traza=True)) prueba_reinas( 16, lambda gr: csp.asignacion_grafo_restriccion(gr, consist=1, traza=True)) prueba_reinas( 50, lambda gr: csp.asignacion_grafo_restriccion( gr, consist=1, traza=False)) prueba_reinas( 101, lambda gr: csp.asignacion_grafo_restriccion( gr, consist=1, traza=False)) # Utilizando consistencia # ============================================================================= # 25 puntos: Probar y comentar los resultados del métdo de arco consistencia
s1 = [0, 0, 3, 0, 2, 0, 6, 0, 0, 9, 0, 0, 3, 0, 5, 0, 0, 1, 0, 0, 1, 8, 0, 6, 4, 0, 0, 0, 0, 8, 1, 0, 2, 9, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 6, 7, 0, 8, 2, 0, 0, 0, 0, 2, 6, 0, 9, 5, 0, 0, 8, 0, 0, 2, 0, 3, 0, 0, 9, 0, 0, 5, 0, 1, 0, 3, 0, 0] print "Solucionando un Sudoku dificil" sudoku1 = Sudoku(s1) sudoku1.imprime_sdk(s1) sol1= csp.asignacion_grafo_restriccion(sudoku1) #sol1 = csp.solucion_CSP_bin(sudoku1) sudoku1.imprime_sdk(sol1) s2 = [4, 0, 0, 0, 0, 0, 8, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 8, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 0, 7, 0, 5, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0]