Verification du programme [Résolu]

Messages postés
18
Date d'inscription
mardi 31 décembre 2013
Dernière intervention
25 mars 2014
-
Bonjour,
je sollicte votre aide pour m'aider a verifier si le programme correspond aux probleme posé:
voici le probleme:
Il s'agit de simuler le comportement d'un système d'attente correspondant à une chaîne d'assemblage ayant les caractéristiques suivantes :
* le poste serveur 1 est une machine d'assemblage qui a besoin de deux composants
* le composant 1 arrive sur le serveur 1 suivant une loi exponentielle de durée moyenne 1'30
* le composant 2 arrive sur le serveur 1 suivant une loi exponentielle de durée moyenne 1'10
* la pièce ainsi assemblée doit se rendre sur le serveur 2 où un troisième composant est installé
* le composant 3 arrive sur le serveur 2 suivant une loi exponentielle de durée moyenne 2'
* la durée d'assemblage sur poste serveur 1 suit une loi exponentielle de durée moyenne 1'
* la durée d'assemblage sur poste serveur 2 suit une loi exponentielle de durée moyenne 1'30

voici le programme. Toute proposition est la bienvenue pour corriger et/ou modifier le programme

'déclaration des variables et pointeurs'
Dim TARRSER, TARRFILE, tps_moy_arr, tps_moy_ser As Double
Dim ARR, SER, CAL, Ind, jmax   As Integer
'remplissage des deux premières colonnes avec une loi uniforme sur [0,1]'
Sub INITIALISATION()
'demande de la durée moyenne entre deux arrivées consécutives
tps_moy_arr = InputBox("Durée moyenne entre deux arrivées consécutives en minutes")
'demande de la durée moyenne de service
tps_moy_ser = InputBox("Durée moyenne de service en minutes")
'demande du nombre total de trajectoires
jmax = InputBox("Nombre total de simulation")
'titre des colonnes 1 à 4
Cells(1, 1) = "Uni1"
Cells(1, 2) = "Uni2"
Cells(1, 3) = "arrivées"
Cells(1, 4) = "Services"
     For j = 1 To jmax
     Range("A2:B101").Select
     Selection.ClearContents
     Application.Run "ATPVBAEN.XLA!Random", ActiveSheet.Range("$A$2"), 2, 100 _
        , 1, 3 * j + 2, 0, 1
'remplissage des colonnes 3 et 4'
For i = 2 To 101
Cells(i, 3) = -tps_moy_arr * Log(Cells(i, 1))
Cells(i, 4) = -tps_moy_ser * Log(Cells(i, 2))
Next
VECTETAT

'RESULTATS()
'Nombre moyen de client dans la file N'
'taux d'occupation moyen du serveur T'
'temps moyen d'attente dans le système AT'
Point = 3
sommefile = 0
sommeserveur = 0
SOR = 0
NBS = 0
While Cells(Point, 5) <> "fin"
    'Recherche des sommes des temps de sortie et du nbre de sorties totales'
    If Cells(Point, 6) = -1 Or Cells(Point, 6) = 0 Then
        SOR = Cells(Point, 5) + SOR
        NBS = NBS + 1
    End If
    'Recherche des produits intervalles de temps par état file ou serveur'
    inter = Cells(Point, 5) - Cells(Point - 1, 5)
    sommefile = sommefile + inter * Cells(Point - 1, 7)
    sommeserveur = sommeserveur + inter * Cells(Point - 1, 8)
    Point = Point + 1
Wend
'Nombre total de sortie NBT'
NBT = NBS
'calcul de AT par recherche des temps d'entrée correspondant'
Point = 3
ENT = 0
While Cells(Point, 5) <> "fin" And NBS > 0
    If Cells(Point, 6) = 1 Or Cells(Point, 6) = 0 Then
        ENT = Cells(Point, 5) + ENT
        NBS = NBS - 1
    End If
    Point = Point + 1
Wend
AT = (SOR - ENT) / NBT
Cells(1, 11) = "AT Système"
Cells(j + 1, 11) = AT
'calcul des indicateurs T et N'
'durée totale du calendrier duree'
duree = Cells(Ind, 5)
'N nbre moyen client dans file d'attente'
N = sommefile / duree
'T taux moyen d'occupation du serveur'
T = sommeserveur / duree
Cells(1, 9) = "N"
Cells(j + 1, 9) = N
Cells(1, 10) = "T"
Cells(j + 1, 10) = T
'calcul temps moyen dans le serveur ASer'
Moy = 0
For i = 2 To NBT + 1
    Moy = Moy + Cells(i, 4)
Next
ASer = Moy / NBT
Cells(1, 12) = "AT serveur"
Cells(j + 1, 12) = ASer
Cells(j + 1, 13) = "NBT"
Cells(j + 1, 13) = NBT
Next
End Sub



'remplissage des lignes du vecteur d'état'
Sub VECTETAT()

Cells(1, 5) = "Calendrier"
Cells(1, 6) = "Evenement"
Cells(1, 7) = "Etat File"
Cells(1, 8) = "Etat serveur"
'initialisation des variables et pointeurs'
CAL = 2
ARR = 2
SER = 2
TARRSER = 0
TARRFILE = 0
Cells(2, 5) = 0
'Cells(2, 6) = 0
Cells(2, 7) = 0
Cells(2, 8) = 0
While (ARR < 102 And SER < 102)
    If Cells(CAL, 8) = 0 Then
        ENTREE
    Else
        If (TARRFILE + Cells(ARR, 3) < TARRSER + Cells(SER, 4)) Then
         ENTREE
        ElseIf (TARRFILE + Cells(ARR, 3) = TARRSER + Cells(SER, 4)) Then
         ENTREESORTIE
        ElseIf (TARRFILE + Cells(ARR, 3) > TARRSER + Cells(SER, 4)) Then
        SORTIE
        End If
    End If
    CAL = CAL + 1
Wend
Cells(CAL, 5) = "fin"
'dernière ligne du calendrier Ind'
Ind = CAL - 1
End Sub
Sub SORTIE()
Cells(CAL + 1, 5) = TARRSER + Cells(SER, 4)
Cells(CAL + 1, 6) = -1
If Cells(CAL, 7) = 0 Then
    Cells(CAL + 1, 8) = 0
    Cells(CAL + 1, 7) = 0
    TARRSER = -2
End If
If Cells(CAL, 7) >= 1 Then
    Cells(CAL + 1, 7) = Cells(CAL, 7) - 1
    Cells(CAL + 1, 8) = 1
    TARRSER = Cells(CAL + 1, 5)
End If
SER = SER + 1
End Sub
Sub ENTREESORTIE()
Cells(CAL + 1, 5) = TARRFILE + Cells(ARR, 3)
Cells(CAL + 1, 6) = 0
Cells(CAL + 1, 7) = Cells(CAL, 7)
Cells(CAL + 1, 8) = Cells(CAL, 8)
TARRSER = Cells(CAL + 1, 5)
TARRFILE = Cells(CAL + 1, 5)
SER = SER + 1
ARR = ARR + 1
End Sub
Sub ENTREE()
Cells(CAL + 1, 5) = TARRFILE + Cells(ARR, 3)
Cells(CAL + 1, 6) = 1
If Cells(CAL, 8) = 0 Then
    Cells(CAL + 1, 8) = 1
    Cells(CAL + 1, 7) = 0
    TARRSER = Cells(CAL + 1, 5)
End If
If Cells(CAL, 8) = 1 Then
    Cells(CAL + 1, 7) = Cells(CAL, 7) + 1
    Cells(CAL + 1, 8) = 1
End If
TARRFILE = Cells(CAL + 1, 5)
ARR = ARR + 1
End Sub
Sub RESULTATS()
'Nombre moyen de client dans la file N'
'taux d'occupation moyen du serveur T'
'temps moyen d'attente dans le système AT'
Point = 3
sommefile = 0
sommeserveur = 0
SOR = 0
NBS = 0
While Cells(Point, 5) <> "fin"
    'Recherche des sommes des temps de sortie et du nbre de sorties totales'
    If Cells(Point, 6) = -1 Or Cells(Point, 6) = 0 Then
        SOR = Cells(Point, 5) + SOR
        NBS = NBS + 1
    End If
    'Recherche des produits intervalles de temps par état file ou serveur'
    inter = Cells(Point, 5) - Cells(Point - 1, 5)
    sommefile = sommefile + inter * Cells(Point - 1, 7)
    sommeserveur = sommeserveur + inter * Cells(Point - 1, 8)
    Point = Point + 1
Wend
'Nombre total de sortie NBT'
NBT = NBS
'calcul de AT par recherche des temps d'entrée correspondant'
Point = 3
ENT = 0
While Cells(Point, 5) <> "fin" And NBS > 0
    If Cells(Point, 6) = 1 Or Cells(Point, 6) = 0 Then
        ENT = Cells(Point, 5) + ENT
        NBS = NBS - 1
    End If
    Point = Point + 1
Wend
AT = (SOR - ENT) / NBT
Cells(1, 11) = "AT Système"
Cells(j + 1, 11) = AT
'calcul des indicateurs T et N'
'durée totale du calendrier duree'
duree = Cells(Ind, 5)
'N nbre moyen client dans file d'attente'
N = sommefile / duree
'T taux moyen d'occupation du serveur'
T = sommeserveur / duree
Cells(1, 9) = "N"
Cells(j + 1, 9) = N
Cells(1, 10) = "T"
Cells(j + 1, 10) = T
'calcul temps moyen dans le serveur ASer'
Moy = 0
For i = 2 To NBT + 1
    Moy = Moy + Cells(i, 4)
Next
ASer = Moy / NBT
Cells(1, 12) = "AT serveur"
Cells(j + 1, 12) = ASer
Cells(j + 1, 13) = "NBT"
Cells(j + 1, 13) = NBT
End Sub

Sub INTER_CONFIANCE()
' préparer les intitulés
    Cells(1, 2) = "N"
    Cells(1, 3) = "T"
    Cells(1, 4) = "ATsystème"
    Cells(1, 5) = "ATserveur"
    Cells(2, 1) = "moyenne"
    Cells(3, 1) = "Ecart-type"
    Cells(5, 1) = "Borne inférieure"
    Cells(6, 1) = "Borne supérieure"
'demande du nombre total de trajectoires
    jmax = InputBox("Nombre total de simulation")
' stocker le nombre d'histoire
    Cells(7, 1) = "Nombre de trajectoires"
    Cells(7, 2) = jmax
'stocker le risque de l'intervalle de confiance
    Cells(8, 1) = "Risque"
    Cells(8, 2) = 0.05
'stocker les bornes de l'intervalle de confiance
    Range("A9").Select
    ActiveCell.FormulaR1C1 = "=NORMSINV(0.975)"
'calculer la moyenne des indicateurs
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=AVERAGE(Feuil1!R2C9:R121C9)"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=AVERAGE(Feuil1!R2C10:R121C10)"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=AVERAGE(Feuil1!R2C11:R121C11)"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=AVERAGE(Feuil1!R2C12:R121C12)"
'calculer l'écart-type des indicateurs
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "=STDEV(Feuil1!R2C9:R121C9)"
    Range("C3").Select
    ActiveCell.FormulaR1C1 = "=STDEV(Feuil1!R2C10:R121C10)"
    Range("D3").Select
    ActiveCell.FormulaR1C1 = "=STDEV(Feuil1!R2C11:R121C11)"
    Range("E3").Select
    ActiveCell.FormulaR1C1 = "=STDEV(Feuil1!R2C12:R121C12)"
'calculer les bornes inférieures et supérieures
    Range("B5:E5").FormulaR1C1 = "=R[-3]C-R9C1*R[-2]C/SQRT(R7C2)"
    Range("B6:E6").FormulaR1C1 = "=R[-4]C+R9C1*R[-3]C/SQRT(R7C2)"
End Sub
Afficher la suite 

Votre réponse

2 réponses

Messages postés
14383
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
10 février 2019
153
0
Merci
Ajout de la coloration syntaxique, merci d'y penser la prochaine fois.
Quel est ton problème exactement ?
Commenter la réponse de NHenry
Messages postés
18
Date d'inscription
mardi 31 décembre 2013
Dernière intervention
25 mars 2014
0
Merci
OK,merci je savais pas comment ça marche.
je voulais savoir si le programme décrit bien l'enoncé de la file d'attente de probleme posé.
merci
Commenter la réponse de Nisrine1

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.