]> AND Private Git Repository - desynchronisation-controle.git/blobdiff - exp_controle_asynchrone/simulMWSN.py
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
beaucoup decourbes
[desynchronisation-controle.git] / exp_controle_asynchrone / simulMWSN.py
index 41e82c6a51cf30798f28684d5f2fdc117dc37b85..218ecb7bc27746b049b3d9b3db3edca1caf48a53 100644 (file)
@@ -9,7 +9,9 @@ from copy import deepcopy
 import sys as sy
 import cv as cv
 import cv2 as cv2 
 import sys as sy
 import cv as cv
 import cv2 as cv2 
-error  = 0.1
+
+errorq  = 0.1
+errorD  = 1E-5
 epsilon = 1E-10
 vrate = 0.8
 p = 0.7
 epsilon = 1E-10
 vrate = 0.8
 p = 0.7
@@ -57,11 +59,12 @@ def afficheGraph(G,l,tx,ty,sink):
     img = cv.CreateImage ((tx, ty), 32, 3)
     cv.Rectangle(img, (0,0),(tx,ty), cv.Scalar(255,255,255), thickness=-1)
     def px((x,y)): 
     img = cv.CreateImage ((tx, ty), 32, 3)
     cv.Rectangle(img, (0,0),(tx,ty), cv.Scalar(255,255,255), thickness=-1)
     def px((x,y)): 
-        return(int(tx*x/coteCarre),ty-int(ty*y/coteCarre))
+        u = float(tx)/(coteCarre + 2*distanceEmmissionMax)
+        return(int(distanceEmmissionMax*u + x * u),int(distanceEmmissionMax*u + y * u))
     for i in set(range(len(l)))-set([sink]):
         (x,y) = l[i]
         pix,piy = px((x,y))
     for i in set(range(len(l)))-set([sink]):
         (x,y) = l[i]
         pix,piy = px((x,y))
-        demx = distanceEmmissionMax*tx/coteCarre
+        demx = distanceEmmissionMax*tx/(coteCarre+2*distanceEmmissionMax)
         cv.Circle(img, (pix,piy),demx, cv.Scalar(125,125,125))     
     
     for i in set(range(len(l)))-set([sink]):        
         cv.Circle(img, (pix,piy),demx, cv.Scalar(125,125,125))     
     
     for i in set(range(len(l)))-set([sink]):        
@@ -119,8 +122,7 @@ afficheGraph(G,l,500,500,sink)
 
 
 
 
 
 
-
-
+exit()
     
 #print G.edges(data=True)
 #TODO afficher le graphe et etre sur qu'il est connexe
     
 #print G.edges(data=True)
 #TODO afficher le graphe et etre sur qu'il est connexe
@@ -428,7 +430,7 @@ def maj(k,maj_theta,mxg,idxexp):
 
     #AfficheVariation(up,vp,lap,wp,thetap,etap,qp,Psp,Rhp,xp,valeurFonctionDualep)
 
 
     #AfficheVariation(up,vp,lap,wp,thetap,etap,qp,Psp,Rhp,xp,valeurFonctionDualep)
 
-    arret = abs(valeurFonctionDuale-valeurFonctionDualep) < error
+    arret = abs(valeurFonctionDuale-valeurFonctionDualep) 
 
     return (up,vp,lap,wp,thetap,etap,qp,Psp,Rhp,xp,valeurFonctionDualep,arret,mxg,smax)
 
 
     return (up,vp,lap,wp,thetap,etap,qp,Psp,Rhp,xp,valeurFonctionDualep,arret,mxg,smax)
 
@@ -520,7 +522,6 @@ def initialisation_():
 
 def __evalue_maj_theta__(nbexp,out=False):
     global u, v, la, w, theta , q,  Ps, Rh,  eta, x, valeurFonctionDuale 
 
 def __evalue_maj_theta__(nbexp,out=False):
     global u, v, la, w, theta , q,  Ps, Rh,  eta, x, valeurFonctionDuale 
-    nbexp = 10
     res = {}
     m = []
     itermax = 100000
     res = {}
     m = []
     itermax = 100000
@@ -529,6 +530,7 @@ def __evalue_maj_theta__(nbexp,out=False):
         mem = []
         om = omega/(mt.pow(k,0.75))
         return om
         mem = []
         om = omega/(mt.pow(k,0.75))
         return om
+    liste_arret=[]
     for idxexp in range(nbexp):
         mxg = 0
         if not(out):
     for idxexp in range(nbexp):
         mxg = 0
         if not(out):
@@ -539,24 +541,31 @@ def __evalue_maj_theta__(nbexp,out=False):
         k = 1
         arret = False
         sm = 0
         k = 1
         arret = False
         sm = 0
+        err, ar = 0,0
         while k < itermax  and not arret : 
             (u,v,la,w,theta,eta,q,Ps,Rh,x,valeurFonctionDuale,ar,mxg,smax)=maj(k,__maj_theta,mxg,idxexp)
         while k < itermax  and not arret : 
             (u,v,la,w,theta,eta,q,Ps,Rh,x,valeurFonctionDuale,ar,mxg,smax)=maj(k,__maj_theta,mxg,idxexp)
-            errorq =  (max(q.values()) - min(q.values()))/min(q.values())
-            arret = errorq <  error
+            err =  (max(q.values()) - min(q.values()))/min(q.values())
+            
+            arret = err <  errorq or ar < errorD
             k+=1
             variation = "+" if smax > sm else "-"
             k+=1
             variation = "+" if smax > sm else "-"
-            print variation,
-            if k%100 ==0 :
-                print "k:",k,"erreur sur q", errorq, "et q:",q
-                print "maxg=", mxg
+            if out : print variation,
+            if k%500 ==0 :
+                print "k:", k, 
+                "erreur sur q", 
+                errorq, "erreur sur F", ar, "et q:", q
+
+                if out : print "maxg=", mxg
                 mem = [deepcopy(q),deepcopy(Ps),deepcopy(Rh),deepcopy(eta),
                        deepcopy(x),deepcopy(u),deepcopy(v),deepcopy(la),deepcopy(w)]
                 mem = [deepcopy(q),deepcopy(Ps),deepcopy(Rh),deepcopy(eta),
                        deepcopy(x),deepcopy(u),deepcopy(v),deepcopy(la),deepcopy(w)]
+            """
             if k%4500 == 0 :
             if k%4500 == 0 :
-                print "#########\n",mem,"\#########\n"
+                
+                #print "#########\n",mem,"\#########\n"
             if k%4600 == 0 :
             if k%4600 == 0 :
-                print "#########\n",mem,"\#########\n"
-
-
+                #print "#########\n",mem,"\#########\n"
+            """
+                
 
             if smax - sm  > 500:
                 print "variation trop grande"
 
             if smax - sm  > 500:
                 print "variation trop grande"
@@ -564,20 +573,23 @@ def __evalue_maj_theta__(nbexp,out=False):
                 print init
                 exit 
             sm = smax
                 print init
                 exit 
             sm = smax
-
+        
         if k == itermax:
             print "nbre d'iteration trop grand"
             print "init"
             print init
             sy.exit(1)
         if k == itermax:
             print "nbre d'iteration trop grand"
             print "init"
             print init
             sy.exit(1)
+        else :
+            liste_arret += [(err, ar,k,errorD)]
 
         print "###############"
         print k
         print "###############"
         m += [k]
 
         print "###############"
         print k
         print "###############"
         m += [k]
-
-    print (min(m),max(m),float(sum(m))/nbexp,m),m
-
+    #print liste_arret    
+    #print (min(m),max(m),float(sum(m))/nbexp,m),m
+    return liste_arret
 
 
 def __une_seule_exp__(fichier_donees):
 
 
 def __une_seule_exp__(fichier_donees):
@@ -638,8 +650,13 @@ def __une_seule_exp__(fichier_donees):
 
 
 ASYNC = False
 
 
 ASYNC = False
-__une_seule_exp__("config_initiale.py")
-#__evalue_maj_theta__()
+#__une_seule_exp__("config_initiale.py")
+listederes=[]
+for k in list(np.logspace(-6, -3, num=15)):
+    errorD = k
+    listederes += __evalue_maj_theta__(5)
+    
+print listederes
 #ASYNC = True
 #taux_succes = 0.9
 #__evalue_maj_theta__()
 #ASYNC = True
 #taux_succes = 0.9
 #__evalue_maj_theta__()
@@ -647,7 +664,7 @@ __une_seule_exp__("config_initiale.py")
 
 
 
 
 
 
-
+"""
 print "u",u
 print "v",v
 print "lambda",la
 print "u",u
 print "v",v
 print "lambda",la
@@ -660,7 +677,7 @@ print "Rh",Rh
 print "x",x
 print "L",valeurFonctionDuale
 
 print "x",x
 print "L",valeurFonctionDuale
 
-
+"""
 
 # relation ente les variables primaires et secondaires ?
 
 
 # relation ente les variables primaires et secondaires ?