Parece que o assunto foi trilhado há muito tempo, o auge da inovação dos sistemas OSS acabou há muito tempo. No entanto, às vezes há explosões locais e disputas violentas sobre esse assunto. Você pode caminhar ao longo da estrada do vendedor ou pode tentar roer o problema de um ângulo diferente.
Palavras-chave: cmdb, soma de multiagentes, monte-carlo, ml.
É a continuação de uma série de publicações anteriores .
Formulação do problema
Não descreveremos a produção em detalhes, na Internet você encontra para todos os gostos e carteiras. O resumo tem a seguinte aparência (originalmente inventado por consultores de ITSM):
- existe um CMDB (base de configuração de elementos de TI). Ele contém uma descrição dos elementos e conexões entre eles (gráfico);
- existe um sistema de monitoramento que de alguma forma faz leituras das encarnações físicas dos elementos de CI;
- existe algum tipo de serviço de negócio que se baseia em elementos de infraestrutura (servidores, aplicações, API, testes, ...);
- o relacionamento entre um serviço e elementos é geralmente descrito por uma árvore e é chamado de modelo de serviço de recurso (PCM);
- Os elementos da infraestrutura possuem seus próprios parâmetros (KPI) pelos quais, levando em consideração a conectividade topológica, deve-se calcular o funcionamento do serviço de negócios (funcionamento / KQI).
Vamos tirar uma foto típica do RSM da documentação de um dos apologistas deste tópico (HP).

Como geralmente é feito
:
- ;
- ;
- ;
- .
. — () . .
:
2021 . . — .
- «multi-agent sumulation»: , ( ) ( );
- «itsm»: ( );
- «monte-carlo»: MAS ;
- «ml»:
data.frame
(rule fit, Modern Rule-Based Models by Max Kuhn), «» ; - «prod»: ml «» event propagation «».
R?
, . . , R . … Shiny. , Shiny, … Shiny.
multi-agent simulation . Shiny, . , . Reactive programming in R by Joe Cheng, DSC 2014
, - nodeA
-> nodeB
-> nodeC
.
library(tidyverse)
library(magrittr)
library(shiny)
library(foreach)
library(iterators)
options(shiny.suppressMissingContextError=TRUE)
makeReactiveBinding("nodeA")
nodeA$in_1 <- NULL
nodeA$in_2 <- NULL
nodeA$out <- reactive(nodeA %$% (in_1 + in_2))
makeReactiveBinding("nodeB")
nodeB$in_1 <- reactive(nodeA$out())
nodeB$in_2 <- NULL
nodeB$out <- reactive(nodeB %$% (in_1() + in_2))
makeReactiveBinding("nodeC")
nodeC$in_1 <- reactive(nodeB$out())
nodeC$in_2 <- NULL
nodeC$out <- reactive(nodeC %$% (in_1() * in_2))
df <- tidyr::expand_grid(val1 = 0:5, val2 = 0:5, val3 = 0:5, val4 = 0:5) %>%
# -
mutate(direct_res = (val1 + val2 + val3) * val4)
res <- foreach(it = iter(df, by = "row"), .combine = "c") %do%
{
nodeA$in_1 <- it$val1
nodeA$in_2 <- it$val2
nodeB$in_2 <- it$val3
nodeC$in_2 <- it$val4
shiny:::flushReact()
nodeC$out()
}
df$mas_res <- res
Em seguida, puxe um data.frame
conjunto de árvores (ou gbm ou qualquer outra coisa ...) e faça uma previsão em duas linhas. Nesse caso, a fórmula de resposta para cada agente pode ser escrita por qualquer meio disponível. Devido ao fato de que os estados dos agentes nesta tarefa são limitados, ao invés de fórmulas, você pode criar uma configuração excel (exemplo abaixo), que é compreensível para qualquer gerente e não requer disputas. Você acha que a linha # 7 deve produzir 'ruim'? Escrevemos e nem discutimos. "Meu serviço são minhas regras!"

Na verdade tudo, o problema está resolvido, o filme acabou.
Post anterior - "Um pouco sobre computação paralela em R" .