Il s'agit d'une notation de modélisation pour la prise de décision définie par OMG (Object Managemnt Group). Ces dernières années, il a attiré l'attention en tant que méthode d'automatisation des décisions dans la partie connaissance de la RPA.
https://www.omg.org/spec/DMN/About-DMN/
La principale caractéristique de DMN est que vous pouvez exécuter le modèle de décision écrit d'une manière facile à comprendre pour les humains. Vous pouvez tester le fonctionnement du DMN avec le simulateur DMN de Camunda (https://camunda.com/dmn/simulator/). Dans cet échantillon, le plat optimal (plat) est déterminé en fonction de la saison et du nombre d'invités, et la boisson optimale (boissons) est déterminée en fonction du plat et des invités avec enfants. Faire. «Optimal» signifie ici basé sur une logique prédéterminée (connaissance des entreprises et des individus). DMN donne cette logique dans une table appelée table de décision. Pour plus d'informations, veuillez consulter ici.
Essayez de définir le tableau de décision sur les boissons, les invités avec enfants sur vrai, la saison jusqu'à l'automne et le nombre d'invités sur 2. Deux boissons, Aecht Schlenkerla Rauchbier et Apple Juice, ont été produites comme ci-dessous. À partir de l'écran, vous pouvez voir que Spareribs a été sélectionné comme plat répondant aux conditions saisies. La bière allemande Aecht Schlenkerla Rauchbier a été choisie comme boisson pour accompagner les Spareribs. Le jus de pomme est pour les enfants, n'est-ce pas? C'est le résultat de la sélection de la boisson la plus appropriée à partir de la «connaissance» appelée table de décision en fonction de la saison saisie et du nombre d'invités.
Dans les coulisses de ce simulateur se trouve le moteur DMN Camunda exécutant le DMN. Cette fois, exécutez ce moteur DMN Camunda localement pour exécuter le DMN.
Cette fois, nous utiliserons l'exemple de fichier DMN de Camunda comme DMN pour la vérification. Téléchargez l'exemple de fichier DMN à partir de «Download DMN Table» sur la DMN Simulator Page. Un outil de conception DMN est nécessaire pour afficher et modifier les fichiers DMN. Personnellement, je recommande Camunda Modeler, qui est autonome et facile à utiliser. En passant, si vous souhaitez simplement exécuter DMN, vous n'avez besoin d'aucun outil de conception.
Le moteur DMN Camunda est publié sur Maven Central. Ajoutez la dépendance suivante au POM.
<dependency>
<groupId>org.camunda.bpm.dmn</groupId>
<artifactId>camunda-engine-dmn</artifactId>
</dependency>
Vous trouverez ci-dessous un exemple de code Java qui exécute DMN.
//Paramètres du chemin du fichier DMN et de l'ID de décision
String dmnFilePath = "./simulation.dmn";
String decisionId = "beverages";
//Paramètres des données d'entrée
Map<String, Object> input = new HashMap<String, Object>();
input.put("season", "Fall"); //l'automne
input.put("guestCount", 2); //2 personnes
input.put("guestsWithChildren",true); //Avec des enfants
//Génération de moteurs DMN
DmnEngine dmnEngine = DmnEngineConfiguration.createDefaultDmnEngineConfiguration().buildEngine();
//Génération de décision
DmnDecision decision = dmnEngine.parseDecision(decisionId,new FileInputStream(dmnFilePath));
//Exécutez DMN
DmnDecisionResult result = dmnEngine.evaluateDecision(decision,input);
//Obtenir le résultat de l'exécution
for(Map<String,Object> entry : result.getResultList()) {
System.out.println(entry.get("beverages"));
}
Ici, le decisionId est spécifié comme l'Id de la table de décision, qui est la valeur définie à l'emplacement suivant sur la table de décision affichée par Camunda Modeler.
L'entrée reçoit la même valeur que l'exemple d'exécution du simulateur DMN plus tôt. Lorsque j'exécute le code ci-dessus, j'obtiens le même résultat que le simulateur DMN comme ci-dessous.
Aecht Schlenkerla Rauchbier
Apple Juice
Etant donné que la sortie de la table de décision «boissons» est uniquement une boisson, vous ne pouvez obtenir des boissons qu'à cette table de décision. Mais de toute façon, je veux obtenir à la fois la nourriture et la boisson sélectionnées. Modifiez donc la table de décision pour augmenter la sortie. L'exemple ci-dessous utilise Camunda Modeler pour éditer la table de décision.
Ajoutez une colonne à la sortie des boissons comme indiqué ci-dessous. Ensuite, la valeur de Dish, qui est l'une des entrées de cette table de décision, est utilisée comme sortie. Le "plat souhaité" dans cette colonne de sortie signifie une référence à l'expression (nom de variable) du plat.
L'élément Input de la table de décision a Label, qui est une étiquette d'affichage, Expression, qui définit le nom de variable ou l'expression de la valeur, et Type, qui indique le type de données de la valeur. Dans Camunda Modeler, Expression ne s'affiche que si vous cliquez sur l'en-tête Entrée. Dans l'exemple de DMN, l'expression de la colonne Dish est désirée et utilisez cette valeur lors du référencement à partir d'autres colonnes.
Ensuite, réécrivez «Get Execution Result» dans le code Java ci-dessus afin que les aliments et les boissons puissent être affichés comme suit.
//Obtenir le résultat de l'exécution
for(Map<String,Object> entry : result.getResultList()) {
System.out.println(entry.get("desiredDish") + " with " + entry.get("beverages"));
}
Le résultat de l'exécution est indiqué ci-dessous. Vous pouvez maintenant obtenir à la fois de la nourriture et des boissons.
Spareribs with Aecht Schlenkerla Rauchbier
Spareribs with Apple Juice
Recommended Posts