Jerôme Barbier, Augustin Husson, RICM4
On peut donc se rendre immédiatement compte que plus une ville aura une grande population, plus la probabilité que les immigrants aille dans cette ville va augmenter, donc que le nombre d'habitant augmente, donc que la probabilité du prochain immigrants à choisir cette ville augmente etc… Au final, on peut facilement imaginer tomber dans le cas où une ville se retrouve avec beaucoup d'habitants et l'autre non.
On s'attend donc à avoir une ville avec tout les habitants (la ville 2) et l'autre ville avec très très peu de personne. Prenons un autre exemple, si les deux villes commencent avec 100 de populations, alors le premier immigrants aura une probabilité de rejoindre la ville 2 égale à 100/200 = ½, et le prochain immigrant 101/200 environ égale à ½. Le sénario attendu est que les deux villes devraient avoir une population relativement égale.
set.seed(5)
p <- function(n1, n2) {
proba <- n1/(n1 + n2)
c(proba)
}
fun <- function(n1, n2, n) {
i <- 1
nk1 <- n1
nk2 <- n2
proba <- 1:(n)
while (i < n + 1) {
x <- runif(1, 0, 1)
proba[i] <- p(nk1, nk2)
if (x <= proba[i]) {
nk1 <- nk1 + 1
} else {
nk2 <- nk2 + 1
}
i <- i + 1
}
c(proba)
}
trace <- function(n, nbre) {
i <- 1
proba <- fun(1, 1, n)
plot(proba, col = "red", ylim = c(0, 1), type = "l")
while (i < nbre) {
proba <- fun(1, 1, n)
points(proba, col = i)
i <- i + 1
}
}
Pour la valeur de n, nous l'avons choisit de telle façon qu'elle soit suffisament grande pour que les variations de P(t) se stabilisent. Après plusieurs test, il apparait que n=2000 est une bonne valeur.
Concernant le graphe que nous obtenons, on peut voir qu'aucune courbes ne se chevauchent et qu'elles sont plutôt réparties sur tout le graphe.
trace(2000, 10)
Ici on ne s'intéresse qu'à la valeur limite que peut prendre P(t). Avec la question précédente on s'est arrangé pour avoir un t suffisament grand de telle sorte que P(t) ne varie plus ou presque.
Par conséquent pour obtenir la limite de P(t) quand t tend vers l'infini , il suffit de prendre un t grand et de prendre la dernière valeur de P(t). Avec la question précédente t = 2000 est suffisant.
Il est donc inutile de conserver en mémoire un tableau de plusieurs milliers d'éléments si seule la dernière valeur de P(t) nous intéresse. C'est donc pourquoi nous allons modifier la fonction fun pour l'adapter à nos besoins moins gourmants en mémoire que la question précédente.
fun2 <- function(n1, n2, n) {
i <- 1
nk1 <- n1
nk2 <- n2
proba <- 1/2
x <- 0
while (i < n + 1) {
x <- runif(1, 0, 1)
proba <- p(nk1, nk2)
if (x <= proba) {
nk1 <- nk1 + 1
} else {
nk2 <- nk2 + 1
}
i <- i + 1
}
c(proba)
}
valfinal <- function(nbreTrajectoire, t, n1, n2) {
i <- 1
tab <- 1:nbreTrajectoire
while (i <= nbreTrajectoire) {
tab[i] <- fun2(n1, n2, t)
i <- i + 1
}
c(tab)
}
Histogramme des valeurs obtenues:
hist(valfinal(5000, 2000, 1, 1), col = "light green")
En observant cet histogramme, on remarque que les valeurs sont réparties de manière uniforme. En effet les colonnes ont à peu près le même nombre de valeur. On peut donc en conclure que la lois de la valeur limite est uniforme.
Comme nous l'avions pensé pour la Question 0, l'état initiale influence énormément la répartition de la population. Si la population initiale de la ville 1 est égale à la population initiale de la ville 2 alors plus la population initiale des deux villes est grande, plus la probabilité d'avoir deux villes avec une population très proche est grande :
histogramme pour les états initiaux {(1,1),(10,10),(100,100)}
histall <- function(nbreTrajectoire, t) {
hist(valfinal(nbreTrajectoire, t, 1, 1), col = "green")
hist(valfinal(nbreTrajectoire, t, 10, 10), col = "red")
hist(valfinal(nbreTrajectoire, t, 100, 100), col = "orange")
}
histall(5000, 2000)
Nous pouvons faire le raisonnement inverse dans le cas ou initialement une population est bien supérieure à une autre. Dans ce cas, alors nous avons une ville avec bien plus d'habitant que l'autre alors que l'autre sera “désertique”. Bien entendu, plus la différence initiale sera grande, plus cette probabilité sera grande :
histogramme pour les états initiaux {(1,1),(1,10),(1,100)}
histall <- function(nbreTrajectoire, t) {
hist(valfinal(nbreTrajectoire, t, 1, 1), col = "green")
hist(valfinal(nbreTrajectoire, t, 1, 10), col = "red")
hist(valfinal(nbreTrajectoire, t, 1, 100), col = "orange")
}
histall(5000, 2000)
Concernant la répartition des populations suivants l'état iniatial, notre avis n'a pas changé car les résultats rejoignent ce que nous avions pensé initialement.
Par contre, concernant la loi uniforme de la valeur limite, les résultats montrent qu'il n'existe donc pas 3 scénarios distinct mais que finalement tous les scénarios sont possibles de manière équivalente.
Concernant les test a envisagé , on peut tenter :
1) Une simulation d'épidémie : Au bout d'un certain nombre de personnes dans une ville, une épidémie se déclare, ce qui entraine la mort d'un pourcentage de la population et influence donc la probabilité P(t).
2) Des conditions sociales : taux de chômage élevé, une politique raciale…
3) Des conditions climatiques : zone sismique, volcanique, est-ce une zone très ensoleillé comme dans le sud de la France par exemple.
Toutes ces conditions peuvent influer sur les choix que feraient des personnes dans le choix de leur habitat.