Inspiré du post de flight simulation trajet bus
Chaque jour, les bus partent du dépôt à vide.
À chaque arrêt, chaque passager a une chance sur cinq de descendre. Et des 16 personnes qui attendent à l'arrêt, chacune a une chance sur deux d'essayer de monter dans le bus.
1) En moyenne, combien de personne seront dans le bus après un grand nombre d'arrêts?
2) Quelle est cette moyenne en fonction du nombre d'arrêts effectués?
Si mes bus sont limités à 45 passagers et mes trajets limités à 25 arrêts:
3) En moyenne combien de personnes auront étées empêchées de monter dans le bus par manque de place?
4) Quelle doit être la taille minimale de mes bus pour qu'il y ait moins de un trajet sur cent où au moins une personne est empêchée de monter.
Bonjour LittleFox
Puis-je ajouter que la participation de Flight est obligatoire ?
Un peu saturé , personnellement je ferai l'impasse
Imod
salut à tous
question sur cet enoncé "16 personnes qui attendent à l'arret " veux dire qu'on a toujours 16 personnes à chaque arrêt ?
@candide2
1) Correct. C'est plus qu'une estimation. Non?
Je suis curieux de voir ta simulation.
Sur 10^5 voyages de 100 arrêts, ma simulation donne un nombre beacoup plus proche de la moyenne (<0.05% d'erreur).
Et mes min et max sont de l'ordre de 17 et 69. Qu'appelles-tu "dispersion"?
2) Pour les deux premières questions, il n'y a pas de limite sur le nombre de passagers ni sur le nombre d'arrêts.
On sait d'au départ du dépôt la moyenne est de 0 passagers et on connait la moyenne pour un grand nombre d'arrêts (question 1).
Je voudrais la moyenne après 1,2,3, ... arrêts (la courbe rouge dans le graphique de l'énoncé).
3) Oui, voilà. Chaque trajet fait 25 arrêts. Et le bus est limité à 45 passagers.
En moyenne (sur un nombre infini de trajets) combien de personnes (par trajet) auront été empêchées de monter dans le bus par manque de place?
Je n'ai pas la réponse exacte. Seulement une estimation par simulation.
Les courbes en bas du graphique de l'énoncé représentent le nombre de passagers qui n'ont pas pu monter à chaque arrêt sur chaque trajet.
@LittleFox
Question 1:
Copie de mon programme de simulation à gauche et résultats à droite.
NB: j'ai ici fait 10 groupes de 250000 arrêts au lieu de 1000000 pour gagner un peu de temps ...
Dans ce groupe de mesure, le résultat min est 32 et le max est 47, la moyenne de ces 10 résultats est 40,2
pour répondre à la première question , je propose d'ecrire avec bn , le nombre de voyageur se trouvant dans le bus à l'arret apres mouvements de montées et descentes ; que
bn= 8 + (4/5).bn-1 , avec b0=0
la resolution de cette suite avec le chgt de variable bn=Un+40 donne : bn= -(4/5)(b0-40) + 40 soit :
bn= 40.(1-(4/5)n) en pssant à la limite n -> infini
b tend vers 40
@candide2
1) Ok donc c'est 10 voyages de 250000 arrêts qui sont simulés. Et pas 10^6 voyages. Ça explique la faible précision.
Tu vois à la question 2 que la moyenne converge très vite en fonction du nombre d'arrêts. Pas besoin de faire 250000 arrêts. C'est pourquoi je ne fais que 100 arrêts. Mais 10^5 voyages.
2) Ça à l'air correct. Est-ce que tu peux donner la formule utilisée dans ton excel?
3) C'est un peu bas. Est-ce que tu sais donner un peu plus de détails (nombres de voyages testés, variance, ...)?
4) On peut même descendre un peu. Pour référence, pour un bus de 45 places, 51% des voyages doivent refuser au moins un passager.
@flight
1) Donc est "le nombre moyen de voyageur se trouvant dans le bus à l'arret n".
40 est correct.
J'avais une autre approche: A l'équilibre le nombre de voyageur moyen qui montent est égal au nombre de voyageur moyen qui descendent.
.
2) Tu n'utilises pas ton changement de variables (ou en tout cas tu ne l'écris pas).
Mais c'est correct,
pour la suite je propose la simulation suivante , en considerant que si le bus est plein à l'arret "s" il ne prend pas de voyageurs mais peut se retrouver à un arret ulterieur dans une situation normale ou des voyageurs peuvent monter , c'est à dire donc avoir des cas de saturations que sur certaines stations , le but de mon code est de trouver le nombre de voyageurs penalisés qui souhaitaient monter sur un trajet de 25 stations .
Sub trajet_montée_decsente()
Randomize
e = 0
q = 0
Do
e = e + 1 'nombre d'essais pour l'experience de desserte
n = 0 'nombre de voyageurs au depart de la ligne
s = 0 'compteur de stations
m = 0 'nombre de voyageurs qui souhaitaient monter mais qui n'ont pas pu:
Do
s = s + 1
'descente:
If n > 0 Then 'descente possible si le bus contient au moins un voyageur
For d = 1 To n
p = Rnd
If p >= 0 And p < 1 / 5 Then
n = n - 1
End If
Next
End If
'montée :
If n = 45 Then 'bus plein , personne ne monte à cet arret
'on cherche ensuite le nombre de voyageurs qui souhaitaient monter mais qui n'ont pas pu:"
For j = 1 To 16
p = Rnd
If p >= 0 And p < 1 / 2 Then
m = m + 1 ' compteur de voyageurs pénalisés
End If
Next
Else
For m = 1 To 16
p = Rnd
If p >= 0 And p < 1 / 2 Then
n = n + 1
End If
Next
End If
Loop Until s = 25 'arrêts à desservir
q = q + m 'cumul du nbr des voyageurs qui ne pouvait monter "bus plein"
Loop Until e = 10000
MsgBox q / e 'moyenne du nombre du nbr de voyageurs qui souhaitaient monter mais qui n'ont pas pu sur un trajet de 25 arrets:"
End Sub
@flight
Est-ce que tu peux blank ton code? Pour garder le fil visible.
3) Si le bus a moins de places (après les descentes) que le nombre de personnes qui veulent monter, certaines devront être refusées. Et pas seulement quand le bus est plein.
Cependant, 17 personnes refusées par voyage me semble beaucoup trop élevé.
@candide2
4) Quasi correct C'est bien un bus de 56 places qu'il faut.
Attention que tu fais 50001 voyages (de 0 à 50000) mais que tu divises par 50000
Tu peux utiliser du formatting pour éviter les ...00003
print (f"Car de {max} places : {total/k :.3%} des voyages ont refuse des voyageurs.")
Ici, j'ai utilisé '.3%' qui signifie un poucentage avec 3 décimales de précision.
if Pass > 45:
total += Pass - 45
Pass = 45
pour la derniere question , recherche de la capacité du bus pour répondre aux contraintes :
Cliquez pour afficher
@candide2
Dans ton code il manque la remise du nombre de Pass à 45
@flight
Ton code me semble correct
Note qu'il n'y a pas besoin de séparer le cas bus plein. On a simplement
up = 45 - n = 0
.
Merci à tous les deux pour votre participation
Pour référence voici mon code:
Mean number of passengers after 100 stops: 40.00696.
Mean number of passengers at each stop: [ 0. 7.9941 14.39496 19.51566 23.62136 26.90675 29.52662 31.62617].
Mean number of passengers refused after 25 stops: 2.67154.
Capacity: 50, travels with refused passengers: 12.787%.
Capacity: 51, travels with refused passengers: 8.765%.
Capacity: 52, travels with refused passengers: 5.899%.
Capacity: 53, travels with refused passengers: 3.767%.
Capacity: 54, travels with refused passengers: 2.333%.
Capacity: 55, travels with refused passengers: 1.393%.
Capacity: 56, travels with refused passengers: 0.832%.
Capacity: 57, travels with refused passengers: 0.492%.
Capacity: 58, travels with refused passengers: 0.285%.
Capacity: 59, travels with refused passengers: 0.140%.
Elapsed time: 12.74s
Bonjour,
"Dans ton code il manque la remise du nombre de Pass à 45"
ben oui, elle y était dans mon premier message sur cette question ... où j'avais trouvé 1,92 et puis disparue dans les modifs pour faire les autres questions par modif de code.
Mais dans ma première réponse (1,92) j'avais mis 46 occupant au lieu de 45...
En remettant 45 , la réponse est alors : 2,66
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :