Modélisation d'une chaîne de Markov

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
abraha11
Messages: 7
Enregistré le: 01 Oct 2018, 14:05

Modélisation d'une chaîne de Markov

par abraha11 » 05 Sep 2019, 22:40

Bonjour,

Supposons que j'ai N serveurs qui desservent des voitures qui arrivent dans la zone où sont placés ces serveurs. Le temps du traitement des demandes des voitures est déterminé par le choix du serveur (chaque serveur a une horloge propre à lui et différente des autres).

Je voudrais formuler ce problème afin d'analyser certains paramètres comme : Le nombre de voitures qui ne seront pas desservies à cause d'une attente trop longue (condition sur le temps d'attente) en fonction du nombre des serveurs disponibles, de la charge du système, etc…

J'ai pensé à modéliser le système comme une chaine de markov du type M/M/C mais je ne suis pas sur des hypothèses qu'il faut mettre en place. Faut-il peut être considérer le système comme étant une chaine M/D/C vu que le temps de traitement est plutôt déterministe ?

En cherchant un peu j'ai trouvé qu'avec le M/M/C on peut avoir les expressions du temps d'attente, le temps du séjour dans le système et même le nombre de voiture bloquées.

Merci d'avance pour vos pistes !



Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

Re: Modélisation d'une chaîne de Markov

par fatal_error » 06 Sep 2019, 22:08

slt,

je sais pas trop c'est quoi le but de ta modélisation,
mais si tu veux juste simuler ce qu'il se passe,

tu peux juste
- créer une queue (qui stocke tes voitures avec leur date d'arrivée)
- de manière "plus ou moins" aléatoire, tu rajoutes (ou pas) une nouvelle voiture dans la queue avec sa date d'insertion*
- à un temps t
tu checkes toutes les voitures qui ont "expiré" et tu les dégages de la queue
tu prends la plus vieille et le serveur qui la prend devient occupé
tu recheckes au temps t + t_i (temps de traitement du serveur)

Une simu très bête ressemble à
Code: Tout sélectionner
    var queue = []
    function frame(){
        if(Math.random() > 0.9){
            queue.push(Date.now());
        }
    }
    setTimeout(1000, _=>frame())
    var serveurs = [
        {timeToServe:1}
        {timeToServe:2}
        {timeToServe:4}//disons minutes
    ];

    function dequeue(s){
        while(queue.length){
            queue.pop();
            if(queue + expirationTime < Date.now()){
                //do nothing, that car is dead
                continue
            }
            //handle the current car
            setTimeout(s.timeToServe*60*1000, _=>dequeue(s))
        }   
    }
    servers.forEach(s=>{
        dequeue(s)
    })

plusieurs problèmes: on va __vraiment__ attendre des secondes pour voir ce qu'il se passe.
il suffit alors de simplement gérer une stack d'évènements, et de trier cette stack par timestamp à chaque ajout

idem une bête réimplem de timeout devrait suffire:
Code: Tout sélectionner
var setTimeout = (function(){
    return function(ts, cbk){
        stack.push({ts, cbk})
        stack.sort((a,b)=>a.ts-b.ts)
        var next = stack.pop()
        next()
    }
})()


je n'ai pas testé le code, juste pondu, mais ca devrait pas être trop loin
Vu qu'on parle de serveurs et de voiture, les perfs devraient être suffisantes :)

edit, et revoir Date.now mais bon c'est un détail
la vie est une fête :)

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 36 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite