Я думаю, вам лучше представлять информацию в виде набора матриц смежности, которые сообщают вам
«Как много из этого сделано из этого». Вам нужно 4 матрицы, соответствующие всем возможным
отношения.
Например, вы помещаете связь между конечным продуктом и промежуточным продуктом в матрицу из 3 строк.
и 2 столбца, как это:
QPI <- matrix(0,3,2)
row.names(QPI) <- c("p1","p2","p3")
colnames(QPI) <- c("i1","i2")
QPI["p1","i1"] <- 2
QPI["p3","i2"] <- 5
i1 i2
p1 2 0
p2 0 0
p3 0 5
это говорит о том, что для получения одной единицы конечного продукта требуется 2 единицы промежуточного продукта i1
p1.
Аналогично вы определяете другие матрицы:
QPR <- matrix(0,3,3)
row.names(QPR) <- c("p1","p2","p3")
colnames(QPR) <- c("a","b","d")
QPR["p1","a"] <- 1
QPR["p2","b"] <- 3
QPR["p3","b"] <- 4
QIR <- matrix(0,2,3)
row.names(QIR) <- c("i1","i2")
colnames(QIR) <- c("a","b","d")
QIR["i1","a"] <- 6
QIR["i1","b"] <- 7
QIR["i2","d"] <- 9
QII <- matrix(0,2,2)
row.names(QII) <- colnames(QII) <- c("i1","i2")
Например, глядя на QIR, мы видим, что для производства одной единицы промежуточного продукта i1 требуется 6 единиц сырья a.
Получив это таким образом, вы суммируете все возможные пути перехода от сырья к финалу.
произведение с использованием умножения матриц.
У вас есть 3 условия: вы можете перейти непосредственно от исходного к окончательному [QPR] QPR или перейти от исходного к промежуточному
в финал [QPI%*%QIR
] или из исходного в промежуточное звено в другое промежуточное в финальное [QPI%*%QII%*%QIR
]
Ваш результат в конце представлен матрицей
result <- QPI%*%QIR + QPI%*%QII%*%QIR + QPR
Я собрал весь код ниже. Если вы запустите его, вы увидите, что результат выглядит так:
a b d
p1 13 14 0
p2 0 3 0
p3 240 284 45
, который говорит то же самое, что и
prodName |component |qty
prod1 |a |1+2*6 = 13
prod1 |b |0+2*7 = 14
prod2 |b |3
prod3 |b |4+5*8*7 = 284
prod3 |a |0+5*8*6 = 240
prod3 |d |0+5*9 = 45
надеюсь, это поможет
QPI <- matrix(0,3,2)
row.names(QPI) <- c("p1","p2","p3")
colnames(QPI) <- c("i1","i2")
QPI["p1","i1"] <- 2
QPI["p3","i2"] <- 5
QPR <- matrix(0,3,3)
row.names(QPR) <- c("p1","p2","p3")
colnames(QPR) <- c("a","b","d")
QPR["p1","a"] <- 1
QPR["p2","b"] <- 3
QPR["p3","b"] <- 4
QIR <- matrix(0,2,3)
row.names(QIR) <- c("i1","i2")
colnames(QIR) <- c("a","b","d")
QIR["i1","a"] <- 6
QIR["i1","b"] <- 7
QIR["i2","d"] <- 9
QII <- matrix(0,2,2)
row.names(QII) <- colnames(QII) <- c("i1","i2")
QII["i2","i1"] <- 8
result <- QPI%*%QIR + QPI%*%QII%*%QIR + QPR
print(result)