Verification du programme

Résolu
Nisrine1
Messages postés
18
Date d'inscription
mardi 31 décembre 2013
Statut
Membre
Dernière intervention
25 mars 2014
- Modifié par NHenry le 4/01/2014 à 15:09
Nisrine1
Messages postés
18
Date d'inscription
mardi 31 décembre 2013
Statut
Membre
Dernière intervention
25 mars 2014
- 4 janv. 2014 à 15:46
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

2 réponses

NHenry
Messages postés
14943
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 juillet 2022
161
4 janv. 2014 à 15:10
Ajout de la coloration syntaxique, merci d'y penser la prochaine fois.
Quel est ton problème exactement ?
0
Nisrine1
Messages postés
18
Date d'inscription
mardi 31 décembre 2013
Statut
Membre
Dernière intervention
25 mars 2014

4 janv. 2014 à 15:46
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
0