Mini-Projet 2013
Sujet 2 : Réseau de capteurs
RICM4 SUN Xuan/ZHANG Zhengmeng
Question 2.1: Algorithme de génération
set.seed(50)
n <- 100 #nombre de capteurs
i <- 1
j <- 1
x <- 1:n #Création du tableau des valeurs contenant les position des capteurs sur l'axe x
y <- 1:n #Création du tableau des valeurs contenant les position des capteurs sur l'axe y
for (i in 1:n) {
x[i] <- runif(1)%/%0.001/1000
y[i] <- runif(1)%/%0.001/1000
}
# (x[i],y[i]) est la position de la capteur numéro i. la partie '%/% 0.001 /
# 1000' est pour garder que les trois chiffres après la virgule.
# --------------------------------------------------------------------------
# le graphe des positions des capteurs
# --------------------------------------------------------------------------
plot(x[], y[], pch = 19, col = "blue", main = "Les positions des capteurs avec n=100")
# ---------------------------------------------------------------------------
# La Matrice des carrés des distances entre les capteurs
# ---------------------------------------------------------------------------
# d[k,j] est le carré de la distance entre la capteur j et k. d[k,j] = 0 si
# j = k. d est la matrice des carrés des distances entre les differents
# capteurs
d <- matrix(nrow = 100, ncol = 100) #définition de matrice
i <- 1
j <- 1
for (i in 1:n) {
for (j in i:n) {
d[i, j] <- (x[i] - x[j])^2 + (y[i] - y[j])^2
}
}
# ---------------------------------------------------------------------------
# Le Graphe de Connexion
# ---------------------------------------------------------------------------
theta <- 0.1 #2 capteurs à une portée inférieur à theta peuvent échanger des informations
t <- theta^2 #t est le carré de theta
plot(x[], y[], pch = 19, col = "blue", main = "Le graphe de connexion avec n=100,theta=0.1") #le graphe de connexion
i <- 1
j <- 1
for (i in 1:n) {
for (j in i:n) {
if (d[i, j] < t) {
segments(x[i], y[i], x[j], y[j], col = "red")
}
}
}
# il y a une arête rouge entre capteurs numéro i et j , si la distance entre
# eux est plus petite que theta
Question 2.2 : Connectivité
et
Question 2.3 : portée critique
La probabilité que deux capteurs soient connectées est pa = pi * theta2 / 1,c'est-à-dire que la position d'une capteur tombe dans le cercle dont le centre est l'autre capteur avec demi-diamètre=theta .
Puis,on a trouvé que le graphe de connexion au dessus est un graphe aléatoire,donc cette question 2.2 égale à la connectivité d'un graphe aléatoire.(Avec Chacune des n(n-1)/2 arêtes est présente avec probabilité pa)
Après avoir lu beaucoup d'articles, on a trouvé que la probabilité qu'un graphe aléatoire avec n sommets soit connexe:
pc(n) = 1 - n * qn-1
avec q = 1 - pa
Donc,les graphes de la probabilité pc(n,theta) en fonction de theta:
Quand n = 10
connect <- function(n, theta) {
pa <- pi * theta^2
q <- 1 - pa
pc <- 1 - n * q^(n - 1)
pc
}
# pour dessiner le graphe de pc en fonction de theta,on génère 100 valeurs
# de pc avec 100 theta différents
n <- 10 #nombre de capteurs
pd <- 1:100 #Création du tableau contenant les valeurs de pc
theta <- 0 #valeur initiale
for (i in 1:100) {
pd[i] <- connect(n, theta)
theta <- theta + 0.01
if (pd[i] > 1)
{
pd[i] <- 1
} #la probabilité ne peut pas être supérieur à 1
}
plot(pd, xlab = "100*theta", ylab = "pc", xlim = c(0, 100), ylim = c(0, 1),
main = "pc(n,theta) en fonction de theta avec n = 10", type = "n")
lines(pd, col = "red")
# Remarque:l'axe x n'est pas la valeur de theta,c'est la valeur de
# 100*theta.
Quand n = 20
On dessine le graphe de même façon:
n <- 20
pd <- 1:100 #Création du tableau contenant les valeurs de pc
theta <- 0 #valeur initiale
for (i in 1:100) {
pd[i] <- connect(n, theta)
theta <- theta + 0.01
if (pd[i] > 1)
{
pd[i] <- 1
} #la probabilité ne peut pas être supérieur à 1
}
plot(pd, xlab = "100*theta", ylab = "pc", xlim = c(0, 100), ylim = c(0, 1),
main = "pc(n,theta) en fonction de theta avec n = 20", type = "n")
lines(pd, col = "green")
# Remarque:l'axe x n'est pas la valeur de theta,c'est la valeur de
# 100*theta.
Quand n = 100
On dessine le graphe de même façon:
n <- 100
pd <- 1:100 #Création du tableau contenant les valeurs de pc
theta <- 0 #valeur initiale
for (i in 1:100) {
pd[i] <- connect(n, theta)
theta <- theta + 0.01
if (pd[i] > 1)
{
pd[i] <- 1
} #la probabilité ne peut pas être supérieur à 1
}
plot(pd, xlab = "100*theta", ylab = "pc", xlim = c(0, 100), ylim = c(0, 1),
main = "pc(n,theta) en fonction de theta avec n = 100", type = "n")
lines(pd, col = "purple")
# Remarque:l'axe x n'est pas la valeur de theta,c'est la valeur de
# 100*theta.
Selon les 3 graphes au dessus,on voit que pc(n,theta) varient tous brutalement à partir de d'une certaine valeur theta.
Question 2.4:Couverture
pour n et theta fixé la probabilité qu'un point à distance r du centre soit couvert
c'est-à-dire que parmi les n capteurs, il y a au moins une capteur dont la position tombe dans le cercle avec le point choisi comme centre et theta comme demi-diamètre.
donc la probabilité pr est: pr = 1 - po, po est la probabilité que toutes les n capteurs soient hors du cercle .
n <- 20
theta <- 0.2
pr <- 1 - (1 - (pi * theta^2/1))^n
pr
## [1] 0.9318