Levayer David RICM4
1) Les habitants vont se répartir dans les deux villes. Au début, les probabilités sont identiques, mais peu à peu, la ville qui prendra l'avantage risque de dominer complétement l'autre. Je distingue deux scénarios possibles sans arriver à trancher définitivement:
2) En reprenant les deux hypothèses précédentes, on aurait (lorsque t -> infini) :
3) D'après les deux propositions de variation la répartition initiale :
set.seed(10)
# états initiaux
n1 <- 1
n2 <- 1
# Nombre de trajectoires à observer
nb <- 10
# Nombre de points par trajectoire (valeur de n)
n <- 2000
# Création du tableau contenant les Pi(t)
tabPt = list()
getCourbe <- function(n1 = 1, n2 = 1, n) {
# Création du tableau contenant les valeurs de P(t)
Pt <- 1:n
for (j in 1:n) {
# On calcule P(t)
inter <- n1/(n1 + n2)
# On tire un réel au hasard entre 0 et 1
xAlea <- runif(1, 0, 1)
# On augmente les populations des villes en fonction des deux calculs
# précédents
if (xAlea < inter) {
n1 <- n1 + 1
} else {
n2 <- n2 + 1
}
# on oublie pas de compléter P(t)
Pt[j] <- inter
}
Pt
}
plot(getCourbe(1, 1, n), ylim = c(0, 1), type = "l", main = "Courbes de P(t)")
for (i in 1:nb - 1) {
lines(getCourbe(1, 1, n), col = i + 100)
}
On observe plusieurs scénarios :
Par ailleurs, certaines courbes ne semblent suivre aucun des trois scénarios précédents… Peut-être que cette impression de “3 scénarios possibles” n'est dû qu'au faible nombre de courbes.
On prend n = 1000 afin d'observer (si elle existe, ce qui semble le cas) la stabilitation de la simulation (les courbes se stabilisent toutes, quelque soit le scénario). Une valeur plus grande semble ici inutile, alors qu'une valeur plus faible (par exemple n = 100) pourrait éventuellement laisser planer un doute.
getLimiteCourbe <- function(n1 = 1, n2 = 1, n) {
# Création du tableau contenant les valeurs de P(t)
Pt <- 1:n
for (j in 1:n) {
# On calcule P(t)
inter <- n1/(n1 + n2)
# On tire un réel au hasard entre 0 et 1
xAlea <- runif(1, 0, 1)
# On augmente les populations des villes en fonction des deux calculs
# précédents
if (xAlea < inter) {
n1 <- n1 + 1
} else {
n2 <- n2 + 1
}
}
inter
}
# On rappelle la valeur de n
n <- 1000
# Nombre de 'limites' de P(t) que l'on souhaite
nbLimite <- 1000
tabLimiteQ2 <- c()
for (i in 1:nbLimite) {
tabLimiteQ2[i] <- getLimiteCourbe(1, 1, n)
}
hist(tabLimiteQ2, main = "Histogramme des valeurs des limites de P(t)")
Il semblerait que la loi soit uniforme. En effet, on observe que les colonnes de l'histogramme sont quasiment toutes égales. Cela implique que les limites sont réparties uniformément sur l'intervalle des valeurs limites de P(t) (intervalle [0,1]). C'est plutôt une surprise (mais les chiffres ne mentent pas, pas vrai ?).
Si on prend 5000 limites, l'égalité des colonnes est encore plus flagrante :
# Nombre de 'limites' de P(t) que l'on souhaite
nbLimite <- 5000
tabLimiteQ2bis <- c()
for (i in 1:nbLimite) {
tabLimiteQ2bis[i] <- getLimiteCourbe(1, 1, n)
}
hist(tabLimiteQ2bis, main = "Histogramme des valeurs des limites de P(t)")
tabLimite <- c()
nbLimite <- 1000
for (i in 1:nbLimite) {
tabLimite[i] <- getLimiteCourbe(10, 10, n)
}
hist(tabLimite, main = "Histogramme des valeurs des limites de P(t) avec n1=10 et n2=10")
for (i in 1:nbLimite) {
tabLimite[i] <- getLimiteCourbe(100, 100, n)
}
hist(tabLimite, main = "Histogramme des valeurs des limites de P(t) avec n1=10 et n2=10")
On remarque que plus la valeur initiale est grande (avec n1=n2), plus les populations des deux villes vont être stables (comprendre P(t) va rester “proche” de 0.5).
On peut expliquer cela car :
si n1 = n2 = 1 : lors de l'arrivé d'une personne, P(t) vaut 1/3 (ou 2/3). Or cette valeur est déjà très éloignée de ½. Donc à l'arrivé de la personne suivante, les probabilités “penchent” déjà fortement en la faveur de l'une des deux villes.
si n1 = n2 = 100 : lors de l'arrivé d'une personne, P(t) vaut 100/201 (ou 101/201). Cette valeur est très proche de 0.5. Ainsi, la personne suivante aura “quasiment” autant de chance de rejoindre la ville A que la ville B. Il en résulte une plus grande stabilité des populations (avec une limite de P(t) qui reste autour de 0.5).
for (i in 1:nbLimite) {
tabLimite[i] <- getLimiteCourbe(1, 10, n)
}
hist(tabLimite, main = "Histogramme des valeurs des limites de P(t) avec n1=1 et n2=10")
for (i in 1:nbLimite) {
tabLimite[i] <- getLimiteCourbe(1, 100, n)
}
hist(tabLimite, main = "Histogramme des valeurs des limites de P(t) avec n1=1 et n2=100")
Comme on pouvait s'y attendre, la population initiale des villes est un paramètre important. Si on fixe n1 < n2, alors on avantage dès le début la ville B (car on aura P(t) < 0.5). Ainsi, les colonnes des histogrammes proches de 0 sont plus grandes car la population de la ville A (qui est désavantagé de part la répartition initiale) n'augmente que très peu.
Le résultat n'est donc pas conforme à mes prédictions. Je pensais que la simulation allait donner lieu à trois grands cas de répartition (répartition égale ou répartion en faveur de la ville A ou de la ville B), alors que la répartition est uniforme…
plot(tabLimiteQ2)
C'est ce plot qui m'a aidé à conclure de la sorte. On voit bien que la répartition des points dans le carré ne suit pas de modèle précis (et surement pas un regroupement en trois scénarios). C'est donc un heureux hasard (enfin, si le hasard existe…) qui m'a fait confondre plot et hist.
On pourrait complexifier un peu la simulation en ajoutant des critères de variation de P(t). Par exemple :