Il semblerait que le sujet ait longtemps été foulé, le pic de l'innovation des systèmes OSS est depuis longtemps révolu. Cependant, il y a parfois des accès de chaleur locaux et des conflits violents sur ce sujet. Vous pouvez marcher le long de la route des vendeurs ou essayer de ronger ce problème sous un angle différent.
Mots-clés: cmdb, sumulation multi-agents, monte-carlo, ml.
C'est la continuation d'une série de publications précédentes .
Formulation du problème
Nous ne décrirons pas la production en détail, sur Internet, vous pouvez la trouver pour tous les goûts et tous les portefeuilles. Le résumé ressemble à ceci (inventé à l'origine par des consultants ITSM):
- il existe une CMDB (base de configuration des éléments informatiques). Il contient une description des éléments et des connexions entre eux (graphique);
- il existe un système de surveillance qui prend en quelque sorte des lectures des incarnations physiques des éléments CI;
- il existe une sorte de service métier basé sur des éléments d'infrastructure (serveurs, applications, API, tests, ...);
- la relation entre un service et des éléments est généralement décrite par un arbre et est appelée un modèle de ressource-service (PCM);
- Les éléments d'infrastructure ont leurs propres paramètres (KPI) par lesquels, en tenant compte de la connectivité topologique, la santé du service métier (santé / KQI) doit être calculée.
Prenons une image typique de RSM à partir de la documentation de l'un des apologistes de ce sujet (HP).

Comment cela se fait-il habituellement
:
- ;
- ;
- ;
- .
. — () . .
:
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
Ensuite, tirez sur un data.frame
ensemble d'arbres (ou gbm ou autre chose ...) et faites une prévision en deux lignes. Dans ce cas, la formule de réponse pour chaque agent peut être écrite par tout moyen disponible. Étant donné que les états des agents dans cette tâche sont limités, au lieu de formules, vous pouvez créer une configuration Excel (exemple ci-dessous), qui est compréhensible par tout gestionnaire et ne nécessite aucun litige. Pensez-vous que la ligne 7 devrait afficher «mauvais»? Nous écrivons et ne discutons même pas. "Mon service est mes règles!"

En fait, tout, le problème est résolu, le film est terminé.
Article précédent - "Un peu de calcul parallèle en R" .