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

Dans un modèle OPL, vous devez déclarer une 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 {
	[...]
} 

Entrer des données

Les données d'entrée peuvent être renseignées à partir d'une source de données externe. Les données d'entrée pour les modèles OPL peuvent être fournies dans l'un des formats suivants :

  • .csv Fichier
  • .dat Fichier
  • Document JSON
  • Les fichiers de classeurs Microsoft Excel (.xlsx et " .xls) sont obsolètes.

    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 '.csv. Pour plus d'informations, voir Données référencées.

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 tuples et tuple sets comme entrées dans le modèle OPL.

Les types pris en charge pour les champs de tuples sont int, float ou string.

Pour associer les valeurs d'entrée à votre modèle OPL, vous devez respecter les règles suivantes :
  • L'élément OPL doit porter le même nom que la propriété JSON ou la feuille de calcul Excel.
  • Un ensemble de tuples peut être renseigné à partir d'un tableau de propriétés JSON ou d'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 de modèles OPL, ce qui facilite 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 à la place 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 .dat. Dans Decision Optimization le fichier Excel doit être inclus dans le modèle et ne peut pas être appelé à partir d'un fichier .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 afin de remplir d'autres structures de données au cours de 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, '.csv 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 subject to dans le fichier .mod. Ainsi, pour définir une sortie JSON, " .csv ou Excel, vous devez déclarer des ensembles de n-uplets ou de n-uplets dans le post-traitement.

Si vous ne déclarez pas d'éléments de sortie dans le bloc de post-traitement du fichier .mod, aucune donnée de sortie n'est générée.

Dans l'exemple suivant, le fichier de sortie contiendra la valeur de Result et NbTrucksOnRouteRes ainsi que la fonction objective car ces éléments sont définis dans le post-traitement.

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};