Hallo zusammen,
ich versuche eine normalverteilte Nachfrage in Excel zu erstellen, welche bestimmte Eigenschaften einhält.
Es handelt sich um eine Nachfrage mit 4 Perioden und 2 Produkten. Folglich also eine 4x2 Matrix mit Kapazitän in jeder Periode.
Es soll zum Ende jeder Periode gelten: kumulierte Kapazitäten<=kum Nachfrage. Das heißt in einer oder mehrere Perioden kann es durchaus gelten, dass Nachfrage > Kapazitäten(außer in der ersten) ist. Die Kapazitäten habe ich bereits erstellt und lese diese aus den entsprechenden Zellen aus. Die Varianz soll dabei zur jeder Periode verändert werden.
Ich verwende die Polarmethode hier um die Nachfrage zu erstellen.
Kurze Anmerkung: Ich weiß nicht warum aber mit Rnd hat die cv immer die selben Werte geliefert.
Mein zentrales Problem ist: Die Do Until Schleife wird zweimal aufgerufen und nicht wird immer die Condition (kumCapacity <= kumDemand Or capacity(pos) <= sumDemand) eingehalten. Leider komme ich mit dem Debug-Tool von VBA nicht so gut klar, sodass ich nicht nachvollziehen kann voran es happert.
Danke vorab für die Hilfe!!!!
Hier mein Ansatz:
Sub calcDemand()
Dim i, j As Integer
Dim cv(3) As Double, sigma As Integer
Dim capacity(3) As Integer
For i = 0 To 3
capacity(i) = Cells(7 + i, 3).Value
Next i
Dim temp As Double
For i = 0 To 3
temp = calcRandom()
cv(i) = Application.WorksheetFunction.Round(temp, 2)
Next i
Dim a1, a2, q, p, z1, z2 As Double
Dim pos As Integer
Dim demand(3) As Double
Dim sumDemand, kumCapacity, kumDemand As Integer
sumDemand = 0
kumCapacity = 0
kumDemand = 0
For i = 0 To 7 Step 2
Do
pos = i - i / 2
kumCapacity = kumCapacity + capacity(pos)
Do
temp = 100 * cv(pos)
a1 = 2 * Rnd - 1
a2 = 2 * Rnd - 1
q = a1 * a1 + a2 * a2
Loop Until q > 0 And q <= 1
p = Sqr(-2 * Log(q) / q) ' Log() ist in VBA der natürliche Logarithmus!
z1 = a1 * p * temp + 100
z2 = a2 * p * temp + 100
z1 = Application.WorksheetFunction.Round(z1, 0)
z2 = Application.WorksheetFunction.Round(z2, 0)
Cells(7 + pos, 1) = z1
Cells(7 + pos, 2) = z2
sumDemand = sumDemand + z1 + z2
demand(pos) = sumDemand
Loop Until kumCapacity <= kumDemand Or capacity(pos) <= sumDemand
sumDemand = 0
kumDemand = kumDemand + demand(pos)
Next i
End Sub
Function calcRandom() As Double
Dim random As Double
random = Rnd
calcRandom = random
End Function
|