Le but de ce DM est de créer une simulation de file d’attente, afin d’en observer l’évolution et les caractéristiques selon trois critères : le taux d’entrées dans le système, le temps de traitement des demandes, et la politique de file d’attente utilisée. Pour cela nous avons choisi que le taux d’entrées dans le système va suivre une loi exponentielle de paramètre lambda, le temps de service va suivre une loi gamma et enfin nous allons utiliser trois politiques de file différentes : lifo, lifo avec préemption et rstp.
En réutilisant le code du professeur sur l’exemple d’une file utilisant la politique fifo et le modifiant un peu je suis arrivé à simuler les trois politiques citées plus haut. Pour la politique lifo, il sufit que le prochain élément qui entre dans le système se place en tête et quand nous voulons démarrer une tâche, nous démarrons celle de tête. Pour la politique lifo avec préemption il faut faire la même chose mais il faut rajouter que quand un nouvel élément entre dans le système alors nous l’exécutons directement et mettons celle qui est préemptée en tête dans la file. Enfin pour la version rstp avec préemption, l’ordre dans la file n’a plus d’importance car c’est désormais le temps nécéssaire au traitement de la demande qui est pris en compte. Du coup, lors du démarrage d’une nouvelle tâche on vérifie parmi toutes celles en attente qu’elle est celle qui demande le moins de temps et on l’exécute. Dans le cas où une nouvelle tâche arrive, on vérifie si le temps qu’elle demande est inférieur à celui qui reste de la tâche courante si c’est la cas on préempte sinon on la rentre dans la file d’attente.
Les temps d’arrivées sont simulés à partir du code suivant : t_in = cumsum(rexp(N,lambda)) Donc grâce à une loi exponentielle ont crée les inter-arrivées des demandes. Les temps de services de chacune des demandes sont créé ainsi : t_s = rgamma(N, shape=shp, scale=1/(mu*shp)) On utilise la loi gamma comme demandé avec N le nombre de nombre à générer. Comme l’espérance de cette loi correspond à shape*scale et que l’on souhaite obtenir 1/mu en espérance alors on place scale à 1(mu*shape) ce qui obligera la constance de l’espérance mais aussi le contrôle de la variance comme ce que l’on souhaite.
Une fois que le code est fini, nous pouvons passer à la phase de simulation. Ci-dessous est présenté le tableau contenant les simulations. De la même manière que ce qui a été fait pour lifo, on test pour les trois politiques est pour un lambda variant de 0.01 à 0.91 par pas de 0.1 avec un nombre d’entrées placé à 10000, de plus on place mu à 1 afin qu’en moyenne le temps de service soit de 1 et shape est placé successivemnt à 1, 10 puis 100 afin d’avoir une variance de plus en plus petite et de resseré les temps de services générés autour de l’espérance.
## test shape mu lambda resp_avg resp_err
## 1 lifo 1 1 0.01 1.026703 0.010042496
## 2 lifo 10 1 0.01 1.004610 0.003263543
## 3 lifo 100 1 0.01 1.005748 0.001146928
## 4 lifo 1 1 0.11 1.135510 0.011596509
## 5 lifo 10 1 0.11 1.068600 0.004085655
## 6 lifo 100 1 0.11 1.062667 0.002493607
## 7 lifo 1 1 0.21 1.270775 0.013352892
## 8 lifo 10 1 0.21 1.146393 0.005168177
## 9 lifo 100 1 0.21 1.138372 0.004038395
## 10 lifo 1 1 0.31 1.422447 0.015742938
## 11 lifo 10 1 0.31 1.253658 0.006933368
## 12 lifo 100 1 0.31 1.226797 0.005879996
## 13 lifo 1 1 0.41 1.712062 0.022129924
## 14 lifo 10 1 0.41 1.364332 0.009229016
## 15 lifo 100 1 0.41 1.362209 0.009397252
## 16 lifo 1 1 0.51 2.094468 0.030270315
## 17 lifo 10 1 0.51 1.577407 0.013870137
## 18 lifo 100 1 0.51 1.541711 0.013021511
## 19 lifo 1 1 0.61 2.458360 0.036028939
## 20 lifo 10 1 0.61 1.876291 0.024417148
## 21 lifo 100 1 0.61 1.734671 0.017401928
## 22 lifo 1 1 0.71 3.321557 0.066238771
## 23 lifo 10 1 0.71 2.318092 0.038876632
## 24 lifo 100 1 0.71 2.262768 0.041265769
## 25 lifo 1 1 0.81 6.989904 0.284578263
## 26 lifo 10 1 0.81 3.342291 0.071950614
## 27 lifo 100 1 0.81 3.044332 0.070972191
## 28 lifo 1 1 0.91 10.728979 0.399963579
## 29 lifo 10 1 0.91 5.329846 0.169863200
## 30 lifo 100 1 0.91 7.284548 0.270818884
## 31 lifo_pre 1 1 0.01 1.026111 0.010137888
## 32 lifo_pre 10 1 0.01 1.009204 0.003404963
## 33 lifo_pre 100 1 0.01 1.011078 0.001421516
## 34 lifo_pre 1 1 0.11 1.135658 0.012816534
## 35 lifo_pre 10 1 0.11 1.121100 0.005344749
## 36 lifo_pre 100 1 0.11 1.124140 0.004116278
## 37 lifo_pre 1 1 0.21 1.275662 0.016089061
## 38 lifo_pre 10 1 0.21 1.265979 0.007760377
## 39 lifo_pre 100 1 0.21 1.275443 0.006947735
## 40 lifo_pre 1 1 0.31 1.419849 0.019310178
## 41 lifo_pre 10 1 0.31 1.454495 0.010951634
## 42 lifo_pre 100 1 0.31 1.444344 0.009805981
## 43 lifo_pre 1 1 0.41 1.716404 0.026550757
## 44 lifo_pre 10 1 0.41 1.683774 0.015302990
## 45 lifo_pre 100 1 0.41 1.709356 0.015300723
## 46 lifo_pre 1 1 0.51 2.059371 0.035668267
## 47 lifo_pre 10 1 0.51 2.052059 0.022518859
## 48 lifo_pre 100 1 0.51 2.081051 0.022115606
## 49 lifo_pre 1 1 0.61 2.461037 0.045716786
## 50 lifo_pre 10 1 0.61 2.548768 0.035232295
## 51 lifo_pre 100 1 0.61 2.440960 0.028180876
## 52 lifo_pre 1 1 0.71 3.270002 0.075404768
## 53 lifo_pre 10 1 0.71 3.385511 0.058314994
## 54 lifo_pre 100 1 0.71 3.499388 0.061734071
## 55 lifo_pre 1 1 0.81 6.800512 0.266140095
## 56 lifo_pre 10 1 0.81 5.238428 0.105184758
## 57 lifo_pre 100 1 0.81 5.234001 0.114221093
## 58 lifo_pre 1 1 0.91 11.224394 0.440556832
## 59 lifo_pre 10 1 0.91 8.725020 0.235838512
## 60 lifo_pre 100 1 0.91 12.873688 0.376661737
## 61 rstp 1 1 0.01 1.020887 0.010050178
## 62 rstp 10 1 0.01 1.004109 0.003271644
## 63 rstp 100 1 0.01 1.005733 0.001147778
## 64 rstp 1 1 0.11 1.064539 0.011263482
## 65 rstp 10 1 0.11 1.060429 0.004183733
## 66 rstp 100 1 0.11 1.061935 0.002483829
## 67 rstp 1 1 0.21 1.139473 0.012957751
## 68 rstp 10 1 0.21 1.129867 0.005165180
## 69 rstp 100 1 0.21 1.135377 0.003846709
## 70 rstp 1 1 0.31 1.181612 0.014297478
## 71 rstp 10 1 0.31 1.221768 0.006776006
## 72 rstp 100 1 0.31 1.220517 0.005376726
## 73 rstp 1 1 0.41 1.317313 0.017544862
## 74 rstp 10 1 0.41 1.312597 0.008473646
## 75 rstp 100 1 0.41 1.347515 0.008072980
## 76 rstp 1 1 0.51 1.467467 0.021836612
## 77 rstp 10 1 0.51 1.479548 0.011992060
## 78 rstp 100 1 0.51 1.517143 0.011064740
## 79 rstp 1 1 0.61 1.585537 0.025568898
## 80 rstp 10 1 0.61 1.706700 0.019061268
## 81 rstp 100 1 0.61 1.696479 0.015017827
## 82 rstp 1 1 0.71 1.877445 0.037227656
## 83 rstp 10 1 0.71 2.004822 0.028996107
## 84 rstp 100 1 0.71 2.175601 0.034288875
## 85 rstp 1 1 0.81 2.906015 0.113940610
## 86 rstp 10 1 0.81 2.682131 0.048392409
## 87 rstp 100 1 0.81 2.863562 0.056575741
## 88 rstp 1 1 0.91 3.978783 0.176866754
## 89 rstp 10 1 0.91 4.003650 0.113239038
## 90 rstp 100 1 0.91 6.515542 0.205338040
Il y a beaucoup de résultats pour les différentes configuration que j’ai présentées plus haut.
Ainsi on peut créer des graphes contenant les résultats afin que cela soit plus clair. J’utilise comme dans l’exemple pour fifo une courbe 1/(1-x) comme patron et voir les similitudes ou différences avec celle-ci.
Pour la configuration suivante : lifo en politique et 1 en variance de service on obtient la courbe suivante :
Pour la configuration suivante : lifo en politique et 0.1 en variance de service on obtient la courbe suivante :
Pour la configuration suivante : lifo en politique et 0.01 en variance de service on obtient la courbe suivante :
Pour la configuration suivante : lifo préemptif en politique et 1 en variance de service on obtient la courbe suivante :
Pour la configuration suivante : lifo préemptif en politique et 0.1 en variance de service on obtient la courbe suivante :
Pour la configuration suivante : lifo préemptif en politique et 0.01 en variance de service on obtient la courbe suivante :
Pour la configuration suivante : rstp en politique et 1 en variance de service on obtient la courbe suivante :
Pour la configuration suivante : rstp en politique et 0.1 en variance de service on obtient la courbe suivante :
Pour la configuration suivante : rstp en politique et 0.01 en variance de service on obtient la courbe suivante :
On possède maintenant une vision plus claire de ce qui s’est passé lors de la simulation. On peut désormais essayer d’expliquer les résultats obtenus.
Pour le cas de la politique lifo : On peut observer une différence entre la variance à 1 et les deux autres. En effet, lorsque la variance est à 1, la courbe suit plutôt bien la courbe patron contrairement aux deux autres variances qui tombent plus bas ce qui montre que lifo s’en sort probablement mieux lorsque les temps de service sont homogène (aux alentours de 1 donc de l’espérance ici) entres eux.
Pour le cas de la politique lifo avec préemption : Pour ce cas là on voit que malgrès les différentes configurations, le résultat obtenu avec cette politique reste très fidèle à la courbe patron. On peut en conclure que ce type de politique n’a pas été affecté par les changements dans l’homogénéité des temps de service, ce qui peut être un avantage dans certains cas de la vie réelle.
Pour le cas de la politique rstp : Dans ce dernier cas, on s’aperçoit que tout d’abord les temps sont plus bas que la courbe patron et comme pour lifo avec préemption, on voit que les résultats sont semblables au cours des changements dans la variance des temps de service. D’ailleurs lifo fait quasiment aussi bien dans les cas de variance faible que rstp mais rstp s’en sort bien malgré une variance à 1 ce qui est un plus.
Pour conclure, on voit tout de même des évolutions notable dans les simulations et des similarités intéressantes malgrès des configurations différentes. On peut voir que rstp s’en sort quand même le mieux du point de vue des résultats.