Formats des données d'entrée et de sortie pour Decision Optimization Modèles OPL
Pour le déploiement, vous devez utiliser les formats de données d'entrée et de sortie suivants pour les modèles OPL Decision Optimization.
Formats de données OPL
tupleset
, pour chaque table que vous utilisez. L'exemple suivant montre un extrait d'un modèle OPL :tuple parameters { int maxTrucks; int maxVolume; } parameters Parameters = ...; tuple location { key string name; } {location} Hubs = ...; tuple spoke { key string name; int minDepTime; int maxArrTime; }; {spoke} Spokes = ...; dvar int+ TruckOnRoute[Routes][TruckTypeIds] in 0..Parameters.maxTrucks; [...] minimize TotalCost; subject to { [...] }
Données d'entrée
Les données d'entrées peuvent être ajoutées à partir d'une source de données externe. Les données d'entrée des modèles OPL peuvent être fournies dans l'un des ces formats :
- fichier
.csv
- fichier
.dat
- Document JSON
- Les fichiers de classeurs Microsoft Excel (
et ".xlsx
) sont obsolètes..xls
Pour se connecter à des fichiers Microsoft Excel, utiliser un connecteur de données. Le connecteur de données transforme votre fichier Excel en un fichier '
. Pour plus d'informations, voir Données référencées..csv
- Fichier .dat
- Toutes les structures de données OPL sont prises en charge. Exemple :
{Parameters = <100, 5000>; Hubs = { <"G">, <"H"> }; Spokes = { <"A", 360, 1080>, <"B", 400, 1150> };
- Document JSON ou classeur Microsoft Excel
- Vous ne pouvez utiliser que
ettuples
comme entrées dans le modèle OPL.tuple sets
Les types pris en charge pour les zones de tuples sont
,int
oufloat
.string
Pour mapper les valeurs d'entrée à votre modèle OPL, vous devez suivre ces règles :- L'élément OPL doit avoir le même nom que la propriété JSON ou le classeur Excel.
- Un ensemble de tuples peut être rempli par un tableau de propriétés JSON ou une feuille de calcul.
- Un élément tuple peut être alimenté par un objet de propriété JSON ou par une feuille Excel à une seule ligne.
Le format JSON peut être utilisé pour l'intégration du modèle OPL afin de faciliter la génération des données d'entrée et l'analyse des résultats.{ "Parameters": { "maxTrucks": 100, "maxVolume": 5000 }, "Hubs": [ { "name": "G" }, { "name": "H" } ], "Spokes": [ { "name": "A", "minDepTime": 360, "maxArrTime": 1080 }, { "name": "B", "minDepTime": 400, "maxArrTime": 1150 }, . . . }
Vous pouvez utiliser un fichier Excel au lieu d'un fichier .dat. Cette option est différente de IBM ILOG CPLEX Optimization Studio où le fichier Excel doit être spécifié comme source externe dans le fichier
. Dans Decision Optimization le fichier Excel doit être inclus dans le modèle et ne peut pas être appelé à partir d'un fichier.dat
..dat
La limitation à l'utilisation de tuples et d'ensembles de tuples en tant qu'entrée OPL a pour but de faciliter l'intégration avec les sources de données. Par exemple, il est possible d'accéder à des sources de données SQL et d'en extraire des données avec un minimum d'effort ; NoSQL il est possible d'accéder à des sources de données et de transformer automatiquement les données en tables. Si nécessaire, le développeur du modèle d'optimisation peut reformuler les données pour remplir d'autres structures de données pendant l'optimisation, mais cette manipulation ne doit pas affecter les données d'entrée ou de sortie.
Données de sortie
Si votre résultat est un fichier texte, la fonction objective et les valeurs des variables de décision sont fournies dans un format non structuré.
Si votre format de sortie est JSON, '
ou Excel, vous devez définir ce que vous souhaitez exporter vers le client dans le bloc de post-traitement. Le post-traitement est tout le code qui suit la section .csv
dans le fichier subject to
. Ainsi, pour définir une sortie JSON, " .mod
ou Excel, vous devez déclarer des ensembles de n-uplets ou de n-uplets dans le post-traitement..csv
Si vous ne déclarez pas d'éléments de sortie dans le bloc de post-traitement du fichier
, aucune donnée de sortie n'est générée..mod
Dans l'exemple suivant, le fichier de sortie contiendra la valeur de
et Result
ainsi que la fonction objective car ces éléments sont définis dans le post-traitement.NbTrucksOnRouteRes
subject to { [...] } tuple result { float totalCost; } result Result; execute { Result.objValue = cplex.getObjValue(); } tuple nbTrucksOnRouteRes { key string spoke; key string hub; key string truckType; int nbTruck; } {nbTrucksOnRouteRes} NbTrucksOnRouteRes = {<r.spoke, r.hub, t, TruckOnRoute[r][t]> | r in Routes, t in TruckTypeIds : TruckOnRoute[r][t] > 0};