X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/16dcc.git/blobdiff_plain/d69591c41135e899d27072006db6af016df62445..151dc81946eee7c7fb5fbc327ada099f2af6a2c3:/evalPRNG/compareFonctionMixingTime.py diff --git a/evalPRNG/compareFonctionMixingTime.py b/evalPRNG/compareFonctionMixingTime.py index 5ff8251..6d6e602 100644 --- a/evalPRNG/compareFonctionMixingTime.py +++ b/evalPRNG/compareFonctionMixingTime.py @@ -27,7 +27,7 @@ def dec(ch,n): def MarkovMatrixUnPas(fbin,n,p2n,lp2nm1): - print p2n + #print p2n MM = np.zeros((p2n,p2n)) # diagonal for i in lp2nm1 : @@ -59,7 +59,7 @@ def MarkovMatrixUnPas(fbin,n,p2n,lp2nm1): def MarkovMatrixSaut(fbin,n,p2n,lp2nm1): - print p2n + #print p2n MM = np.zeros((p2n,p2n)) # diagonal for i in lp2nm1 : @@ -93,8 +93,8 @@ def MarkovMatrixSaut(fbin,n,p2n,lp2nm1): MM[i, dec(ipb,n)] +=float(1)/(2**n) return MM -""" - + +""" @@ -109,10 +109,14 @@ lf += [[55, 60, 45, 44, 58, 62, 61, 48, 53, 50, 52, 36, 59, 34, 33, 49, 15, 42, #lf += [[223, 190, 249, 254, 187, 251, 233, 232, 183, 230, 247, 180, 227, 178, 240, 248, 237, 236, 253, 172, 203, 170, 201, 168, 229, 166, 165, 244, 163, 242, 241, 192, 215, 220, 205, 216, 218, 222, 221, 208, 213, 210, 212, 214, 219, 211, 217, 209, 239, 202, 207, 140, 139, 234, 193, 204, 135, 196, 199, 132, 194, 130, 225, 200, 159, 62, 185, 252, 59, 250, 169, 56, 191, 246, 245, 52, 243, 50, 176, 48, 173, 238, 189, 44, 235, 42, 137, 184, 231, 38, 37, 228, 35, 226, 177, 224, 151, 156, 141, 152, 154, 158, 157, 144, 149, 146, 148, 150, 155, 147, 153, 145, 175, 206, 143, 136, 11, 142, 129, 8, 7, 198, 197, 4, 195, 2, 161, 160, 255, 124, 109, 108, 122, 126, 125, 112, 117, 114, 116, 100, 123, 98, 97, 113, 79, 106, 111, 110, 99, 74, 121, 120, 71, 118, 103, 101, 115, 66, 65, 104, 127, 90, 89, 94, 83, 91, 81, 92, 95, 84, 87, 85, 82, 86, 80, 88, 77, 76, 93, 72, 107, 78, 105, 64, 69, 102, 68, 70, 75, 67, 73, 96, 55, 58, 45, 188, 51, 186, 61, 40, 119, 182, 181, 53, 179, 54, 33, 49, 15, 174, 47, 60, 171, 46, 57, 32, 167, 6, 36, 164, 43, 162, 1, 0, 63, 26, 25, 30, 19, 27, 17, 28, 31, 20, 23, 21, 18, 22, 16, 24, 13, 10, 29, 14, 3, 138, 41, 12, 39, 134, 133, 5, 131, 34, 9, 128]]#8 pas totally -lf +=[[223, 250, 249, 254, 187, 251, 233, 232, 183, 230, 247, 180, 227, 178, 240, 248, 237, 236, 173, 172, 171, 238, 201, 168, 229, 166, 228, 244, 235, 242, 241, 192, 215, 220, 205, 216, 218, 222, 153, 152, 151, 210, 212, 214, 219, 146, 217, 209, 239, 142, 141, 206, 195, 234, 193, 136, 231, 196, 199, 197, 194, 226, 225, 200, 63, 188, 253, 252, 59, 190, 189, 176, 191, 246, 245, 164, 243, 162, 161, 177, 143, 170, 45, 44, 43, 138, 185, 184, 135, 38, 167, 165, 179, 34, 129, 224, 31, 154, 221, 158, 147, 26, 25, 156, 159, 22, 213, 149, 211, 150, 144, 208, 207, 14, 13, 204, 203, 202, 169, 8, 133, 198, 132, 4, 139, 131, 1, 160, 255, 124, 109, 108, 122, 126, 125, 112, 117, 114, 116, 100, 123, 98, 97, 113, 79, 106, 111, 110, 99, 74, 121, 120, 71, 118, 103, 101, 115, 66, 65, 104, 127, 90, 89, 94, 83, 91, 81, 92, 95, 84, 87, 85, 82, 86, 80, 88, 77, 76, 93, 72, 107, 78, 105, 64, 69, 102, 68, 70, 75, 67, 73, 96, 55, 58, 57, 62, 51, 186, 41, 40, 119, 182, 181, 53, 35, 54, 48, 56, 175, 174, 61, 60, 11, 46, 9, 32, 37, 6, 36, 52, 163, 50, 49, 0, 23, 28, 157, 24, 155, 30, 29, 16, 21, 18, 20, 148, 27, 19, 145, 17, 47, 10, 15, 140, 3, 42, 137, 12, 39, 134, 7, 5, 2, 130, 33, 128]] #8 totally - +#lf +=[[223, 250, 249, 254, 187, 251, 233, 232, 183, 230, 247, 180, 227, 178, 240, 248, 237, 236, 173, 172, 171, 238, 201, 168, 229, 166, 228, 244, 235, 242, 241, 192, 215, 220, 205, 216, 218, 222, 153, 152, 151, 210, 212, 214, 219, 146, 217, 209, 239, 142, 141, 206, 195, 234, 193, 136, 231, 196, 199, 197, 194, 226, 225, 200, 63, 188, 253, 252, 59, 190, 189, 176, 191, 246, 245, 164, 243, 162, 161, 177, 143, 170, 45, 44, 43, 138, 185, 184, 135, 38, 167, 165, 179, 34, 129, 224, 31, 154, 221, 158, 147, 26, 25, 156, 159, 22, 213, 149, 211, 150, 144, 208, 207, 14, 13, 204, 203, 202, 169, 8, 133, 198, 132, 4, 139, 131, 1, 160, 255, 124, 109, 108, 122, 126, 125, 112, 117, 114, 116, 100, 123, 98, 97, 113, 79, 106, 111, 110, 99, 74, 121, 120, 71, 118, 103, 101, 115, 66, 65, 104, 127, 90, 89, 94, 83, 91, 81, 92, 95, 84, 87, 85, 82, 86, 80, 88, 77, 76, 93, 72, 107, 78, 105, 64, 69, 102, 68, 70, 75, 67, 73, 96, 55, 58, 57, 62, 51, 186, 41, 40, 119, 182, 181, 53, 35, 54, 48, 56, 175, 174, 61, 60, 11, 46, 9, 32, 37, 6, 36, 52, 163, 50, 49, 0, 23, 28, 157, 24, 155, 30, 29, 16, 21, 18, 20, 148, 27, 19, 145, 17, 47, 10, 15, 140, 3, 42, 137, 12, 39, 134, 7, 5, 2, 130, 33, 128]] #8 totally +#lf +=[ +# [29, 22, 21, 30, 19, 27, 24, 28, 7, 20, 5, 4, 23, 26, 25, 17, 31, 12, 15, 8#, 10, 14, 13, 9, 3, 2, 1, 6, 11, 18, 0, 16],#sylvain 1 +# [29, 22, 25, 30, 19, 27, 24, 16, 21, 6, 5, 28, 23, 26, 1, 17, 31, 12, 15, 8, 10, 14, 13, 9, 3, 2, 7, 20, 11, 18, 0, 4],#sylvain 2 +# [29, 22, 21, 24, 31, 30, 27, 26, 7, 23, 5, 28, 3, 19, 25, 17, 13, 12, 9, 8, 15, 2, 1, 10, 6, 14, 4, 20, 11, 18, 0, 16], #mini avec 7 +# [29, 22, 25, 30, 19, 27, 24, 16, 21, 6, 5, 28, 23, 26, 1, 17, 31, 12, 15, 8, 10, 14, 13, 9, 3, 2, 7, 20, 11, 18, 0, 4]] #5 # 14 = (1,1,1,0) = f(0,0,0,0) @@ -138,19 +142,19 @@ def traite_f(f,dev): M = np.zeros((p2n,p2n)) np.copyto(M,MM) - MMs = MarkovMatrixSaut(fbin,n,p2n,lp2nm1) - Ms = np.zeros((p2n,p2n)) - np.copyto(Ms,MMs) - - - error = 1 cpt = 2 - while error > dev : + while error > dev and cpt < 1000: M = np.dot(M,MM) error =max([sqrt(sum([(M[i,j] - float(1)/p2n)**2 for i in range(p2n)])) for j in range(p2n)]) #print cpt, error, M cpt +=1 + + + """ + MMs = MarkovMatrixSaut(fbin,n,p2n,lp2nm1) + Ms = np.zeros((p2n,p2n)) + np.copyto(Ms,MMs) error = 1 @@ -163,8 +167,8 @@ def traite_f(f,dev): #print cpt, error, M cpts +=1 - - + """ + cpts=1 return n, cpt-1, cpts-1 @@ -178,9 +182,9 @@ def get_treatedlist(rf): # suppr [ et ] #print compteur, l - l = l[1:len(l)-3] + l = l[1:len(l)-2] #print l - lkm = [x for x in l.split(", ")] + lkm = [x for x in l.split(",")] #print lkm treatedlist.append([int(x) for x in lkm]) return treatedlist @@ -214,16 +218,18 @@ def main(): brut=[] cpt = 0 - for f in lf: - dev = 1E-12 + for f in lf: + #print "cpt",cpt + dev = 1E-14 n,cptM,cptS = traite_f(f,dev) brut +=[(f,cptM,cptS)] + cpt+=1 """ print f, n,cptM,cptS #print 8*n*n + 4*n*log(n+1)#,8*n*n + (n+2)*(log(n)+2) #print "Pour "+str(n)+" bits et pour eps="+str(dev)+", appels a rand moy pr 1 bit genere.", print cpt - cpt+=1 + brut.sort(cmp=compareMarche) f,cptM,cptS = brut[0] @@ -242,7 +248,15 @@ def main(): else : print "egales" """ - print brut + #print brut + brut.sort(cmp=compareMarche) + print brut + (meilleure,k,kk) = brut[0] + n,cpM,cPS = traite_f(f,1E-6) + print "Meilleure fonction :\n", f + print "CPM :", cpM + + rf = False def options(): @@ -250,6 +264,7 @@ def options(): parser = OptionParser() parser.add_option("-i", "--input", dest="i", help="file of sequences") + (options, args) = parser.parse_args() if (options.i != None): rf = options.i