Option Explicit
Option Base 1
Sub Simula(X() As Double, Y() As Double, ByVal D As Integer, ByVal M As Integer)
Dim somma1 As Double, somma2 As Double
Dim j As Integer
Dim k As Integer
Dim coda() As Double
Dim serviti() As Double
Dim rifiutati() As Double
Dim c As Double
Dim nr As Integer
Dim cumulata As Double
Dim i As Integer
Dim primo As Double
Dim secondo As Double
Dim casuale1 As Integer
Dim casuale2 As Integer
Dim nr1 As Integer
Dim nr2 As Integer
Dim cumulata1 As Double
Dim cumulata2 As Double
'controllo densita di probabilita
somma1 = 0
For j = LBound(X, 1) To UBound(X, 1)
somma1 = somma1 + X(j, 1)
Next
If somma1 <> 1 Then
MsgBox ("Errore")
End If
somma2 = 0
For k = LBound(Y, 1) To UBound(Y, 1)
somma2 = somma2 + Y(k, 1)
Next
If somma2 <> 1 Then
MsgBox ("Errore")
End If
'fine controllo densita
'istante 1
c = Rnd()
nr = 1
cumulata = X(1, 1)
Do While c > cumulata
cumulata = cumulata + X(nr + 1, 1)
nr = nr + 1
Loop
ReDim Preserve rifiutati(1)
ReDim Preserve coda(1)
If X(nr, 2) <= M Then
coda(1) = X(nr, 2)
rifiutati(1) = 0
Else
coda(1) = M
rifiutati(1) = X(nr, 2) - M
End If
ReDim Preserve coda(1)
ReDim Preserve rifiutati(1)
ReDim Preserve serviti(1)
serviti(1) = 0
ReDim Preserve serviti(1)
MsgBox ("entrano" & X(nr, 2))
MsgBox ("coda" & coda(1))
MsgBox ("serviti" & serviti(1))
MsgBox ("rifiutati" & rifiutati(1))
'fine istante 1 e inizio 2,3,4....D
For i = 2 To D
primo = Rnd()
nr1 = 1
cumulata1 = X(1, 1)
Do While primo > cumulata1
cumulata1 = cumulata1 + X(nr1 + 1, 1)
nr1 = nr1 + 1
Loop
casuale1 = X(nr1, 2)
secondo = Rnd()
nr2 = 1
cumulata2 = Y(1, 1)
Do While secondo > cumulata2
cumulata2 = cumulata2 + Y(nr2 + 1, 1)
nr2 = nr2 + 1
Loop
casuale2 = X(nr2, 2)
ReDim Preserve serviti(i)
If casuale2 >= coda(i - 1) Then
serviti(i) = coda(i - 1)
Else
serviti(i) = casuale2
End If
ReDim Preserve serviti(i)
ReDim Preserve coda(i)
ReDim Preserve rifiutati(i)
If casuale2 < coda(i - 1) Then
If casuale1 + coda(i - 1) - casuale2 <= M Then
coda(i) = casuale1 + coda(i - 1) - casuale2
rifiutati(i) = 0
Else
coda(i) = M
rifiutati(i) = casuale1 + coda(i - 1) - casuale2 - M
End If
Else
If casuale1 <= M Then
coda(i) = casuale1
rifiutati(i) = 0
Else
coda(i) = M
rifiutati(i) = casuale1 - M
End If
End If
ReDim Preserve coda(i)
ReDim Preserve rifiutati(i)
MsgBox ("entrano" & casuale1)
MsgBox ("ne servono" & casuale2)
MsgBox ("coda" & coda(i))
MsgBox ("serviti" & serviti(i))
MsgBox ("rifiutati" & rifiutati(i))
Next
End Sub
Sub prova()
Dim R(4, 2) As Double
Dim U(3, 2) As Double
R(1, 1) = 0.2
R(1, 2) = 2
R(2, 1) = 0.3
R(2, 2) = 1
R(3, 1) = 0.3
R(3, 2) = 4
R(4, 1) = 0.2
R(4, 2) = 3
U(1, 1) = 0.3
U(1, 2) = 3
U(2, 1) = 0.4
U(2, 2) = 1
U(3, 1) = 0.3
U(3, 2) = 2
Call Simula(R(), U(), 5, 3)
End Sub
|