Ich brauche keine Schleifen verwenden oder anwenden, da diese sehr effizient sein muss:effiziente Art und Weise regelbasierte Vektor Subtraktion (Drawdown) über Matrizen in R ohne LOOPS zu implementieren oder anwenden
Für diejenigen, die wissen, was LIFO oder FIFO sind, das sind die Regeln, die ich versuche zu verwenden. Grundsätzlich betrachten Sie das folgende Bestandsmatrix:
Grundsätzlich gegebenen eine Bestandsmatrix „C“ und einige „Drawdown“, „qs“:
J=2
Tp=2
C = matrix(2,J,Tp)
rownam = as.character()
colnam = as.character()
for(j in 1:J){rownam = c(rownam,paste0('prod',j))}
for(j in 1:Tp){colnam = c(colnam,paste0('vint',j))}
rownames(C) = rownam
colnames(C) = colnam
C[1,1]=C[1,1]+1
C[2,1]=C[2,1]-1
> C
vint1 vint2
prod1 3 2
prod2 1 2
Diese Bestandsmatrix gibt es zwei Produkte, die jeweils zwei haben Jahrgänge. Zum Beispiel haben wir 3 Einheiten von 1 Tag altem Produkt 1 und 2 Einheiten von 2 Tage altem Produkt 2. Nehmen wir an, wir sollen 3 Einheiten Produkt1 subtrahieren. Wir könnten es entweder von Jahrgang 1 oder 2 nehmen. LIFO würde es zuerst alle von Jahrgang 1 abschaffen lassen, wobei 0 Einheiten von Jahrgang 1 und 2 Einheiten von Jahrgang 2 übrig bleiben. FIFO würde zuerst die 2 Einheiten von Jahrgang 2 nehmen, und da es eine zusätzliche Einheit gibt, die erfüllt werden muss, geht es weiter Jahrgang 1, 0 von Jahrgang 2 und 2 von Jahrgang 1 verlassend.
Im Folgenden zeige ich diese Regel allgemein für viele "Drawdowns" (zB Nachfrage 3 von Produkt 1 und 4 von Einheit 2 wäre 1 Beispiel für ein Unentschieden)).
Und die Inanspruchnahmen:
qs = rbind(
c(4, 1), c(4,1),
c(4, 1), c(1, 3),
c(3, 2), c(4, 1),
c(1, 2), c(2, 0),
c(2, 1), c(2, 3),
c(0, 3), c(2, 2))
> qs
[,1] [,2]
[1,] 4 1
[2,] 4 1
[3,] 4 1
[4,] 1 3
[5,] 3 2
[6,] 4 1
[7,] 1 2
[8,] 2 0
[9,] 2 1
[10,] 2 3
[11,] 0 3
[12,] 2 2
Jede Zeile des Verlustes ist ein getrenntes simuliertes drawdown, die auf die Matrix aufgebracht unter Verwendung von LIFO oder FIFO werden soll. (LIFO bedeutet, dass Sie die neuesten Jahrgänge wegzunehmen erste (Jahrgang 2), wenn die Nachfrage q der Befriedigung und FIFO bedeutet, dass Sie in die andere Richtung gehen..)
So betreibe ich:
Cmat = do.call(rbind, replicate(dim(qs)[1], C, simplify=FALSE)) #matrix
Der Ausgang für die LIFO aussehen sollte so etwas wie dieses:
drawndown
vint1 vint2
prod1 1 0
prod2 1 1
prod1 1 0
prod2 1 1
prod1 1 0
prod2 1 1
prod1 3 1
prod2 0 0
...
Wenn Sie downvote gehen, können Sie mir bitte sagen, wie ich die Frage stellen kann mehr klar ? – robertevansanders
Was bedeuten die Zahlen "0, 1, 2, 3, 4" in der Draw-Down-Matrix? – Psidom
Sie geben an, wie viel von jedem Produkt aus der Inventarmatrix verringert wird, und die Regel gibt an, welche Jahrgänge jedes Produkts zuerst abgerufen werden. – robertevansanders