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

Private GIT Repository
ajout dune image
[desynchronisation-controle.git] / exp_controle_asynchrone / simulMWSN.py
index bf174629478e737918827f3b6bc0c04d2bdc5805..41e82c6a51cf30798f28684d5f2fdc117dc37b85 100644 (file)
@@ -7,14 +7,14 @@ from itertools import *
 from scipy import optimize as opt
 from copy import deepcopy 
 import sys as sy
 from scipy import optimize as opt
 from copy import deepcopy 
 import sys as sy
-
-
+import cv as cv
+import cv2 as cv2 
 error  = 0.1
 epsilon = 1E-10
 vrate = 0.8
 p = 0.7
 coteCarre = 50
 error  = 0.1
 epsilon = 1E-10
 vrate = 0.8
 p = 0.7
 coteCarre = 50
-distanceEmmissionMax = 30
+distanceEmmissionMax = 20
 nbiter = 1000
 POS = 1
 POS_NUL = 2
 nbiter = 1000
 POS = 1
 POS_NUL = 2
@@ -32,6 +32,9 @@ lg = [(0, 1, 22.004323820359151), (0, 2, 28.750632705280324), (0, 3, 29.68069293
 #lg= [(0,1,23),(1,0,15),(1,2,45)]
 sink = n-1
 
 #lg= [(0,1,23),(1,0,15),(1,2,45)]
 sink = n-1
 
+def distance(d1,d2):
+    return mt.sqrt(sum([(d1[t]-d2[t])**2 for t in d1]))
+
 
 def genereGraph():
     test = False 
 
 def genereGraph():
     test = False 
@@ -46,7 +49,53 @@ def genereGraph():
                         G.add_edge(io,ie,weight=dist)
                         G.add_edge(ie,io,weight=dist)
         test = not(any([ not(nx.has_path(G,o,sink)) for o in  G.nodes() if sink in G.nodes() and o != sink]))
                         G.add_edge(io,ie,weight=dist)
                         G.add_edge(ie,io,weight=dist)
         test = not(any([ not(nx.has_path(G,o,sink)) for o in  G.nodes() if sink in G.nodes() and o != sink]))
-    return G
+    return (G,l)
+
+
+def afficheGraph(G,l,tx,ty,sink):
+    r = 20
+    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))
+    for i in set(range(len(l)))-set([sink]):
+        (x,y) = l[i]
+        pix,piy = px((x,y))
+        demx = distanceEmmissionMax*tx/coteCarre
+        cv.Circle(img, (pix,piy),demx, cv.Scalar(125,125,125))     
+    
+    for i in set(range(len(l)))-set([sink]):        
+        (x,y) = l[i]
+        pix,piy = px((x,y))
+        cv.Circle(img, (pix,piy),r, cv.Scalar(125,125,125),thickness=-1)     
+    
+    #sink
+    (x,y) = l[sink]
+    pix,piy = px((x,y))
+
+    cv.Rectangle(img, (pix-r/2,piy-r/2),(pix+r/2,piy+r/2), cv.Scalar(125,125,125), thickness=-1)
+
+    for i in range(len(l)):
+        for j in range(len(l)):
+            
+            if np.linalg.norm(np.array(l[i])-np.array(l[j])) < distanceEmmissionMax :
+                (xi,yi) = l[i]
+                pixi,piyi = px((xi,yi))
+                (xj,yj) = l[j]
+                pixj,piyj = px((xj,yj))
+                cv.Line(img, (pixi,piyi), (pixj,piyj), cv.Scalar(125,125,125))
+    
+
+    """
+    for i in range(len(l)):
+        (x,y) = l[i]
+        pix,piy = px((x,y))
+        print i
+        textColor = (0, 0, 255)  # red
+        font = cv2.FONT_HERSHEY_SIMPLEX
+        imgp = 
+        cv2.putText(img, str(i), (pix-r/4,piy-r/2),font, 3.0, textColor)#,thickn    """
+    cv.SaveImage("SensorNetwork.png",img)
 
 G = nx.DiGraph()
 G.add_weighted_edges_from(lg)
 
 G = nx.DiGraph()
 G.add_weighted_edges_from(lg)
@@ -56,6 +105,18 @@ G.add_weighted_edges_from(lg)
 #nx.draw(G)
 #pb.show()
 
 #nx.draw(G)
 #pb.show()
 
+(G,l) = genereGraph()
+N = G.nodes()
+#V = list(set(sample(N,int(len(N)*vrate)))-set([sink]))
+V = list(set(N)-set([sink]))
+source = V
+print "source",source
+afficheGraph(G,l,500,500,sink)
+#nx.draw(G)
+#pb.show()
+
+    
+
 
 
 
 
 
 
@@ -64,16 +125,9 @@ G.add_weighted_edges_from(lg)
 #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
 
-N = G.nodes()
-
 
 
-#V = list(set(sample(N,int(len(N)*vrate)))-set([sink]))
-V = list(set(N)-set([sink]))
 
 
 
 
-source = V
-print "source",source
-
 
 L = range(len(G.edges()))
 d = [di['weight'] for (_,_,di) in G.edges(data=True)]
 
 L = range(len(G.edges()))
 d = [di['weight'] for (_,_,di) in G.edges(data=True)]
@@ -146,8 +200,6 @@ def aminp(l):
 
 
 
 
 
 
-def distance(d1,d2):
-    return mt.sqrt(sum([(d1[t]-d2[t])**2 for t in d1]))
 
 
 def AfficheVariation (up,vp,lap,wp,thetap,etap,qp,Psp,Rhp,xp,valeurFonctionDualep):
 
 
 def AfficheVariation (up,vp,lap,wp,thetap,etap,qp,Psp,Rhp,xp,valeurFonctionDualep):
@@ -311,7 +363,7 @@ def maj(k,maj_theta,mxg,idxexp):
     def f_Ps(psh,h):
         #print "ds f_ps",psh, v[h]* mt.log(float(sigma2)/D)/(gamma*((psh**2)**(float(2)/3))) +la[h]*psh
          return v[h]* mt.log(float(sigma2)/D)/(gamma*mt.pow(float(2)/3)) +la[h]*psh
     def f_Ps(psh,h):
         #print "ds f_ps",psh, v[h]* mt.log(float(sigma2)/D)/(gamma*((psh**2)**(float(2)/3))) +la[h]*psh
          return v[h]* mt.log(float(sigma2)/D)/(gamma*mt.pow(float(2)/3)) +la[h]*psh
-     for h in V:
+    for h in V:
          if not ASYNC or  random() < taux_succes:
              """
              lah = 0.05 if la[h] == 0 else  la[h]
          if not ASYNC or  random() < taux_succes:
              """
              lah = 0.05 if la[h] == 0 else  la[h]