Decision Optimization OPLモデルの入出力データ・フォーマット
OPL Decision Optimizationモデルの展開には、以下の入出力データ形式を使用する必要があります。
OPL データ・フォーマット
tupleset
を宣言しなければなりません。 次の例は、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 { [...] }
入力データ
入力データは、外部データ・ソースから取り込むことができます。 OPL モデルの入力データは、以下のいずれかのフォーマットで提供できます。
ファイル.csv
ファイル.dat
- JSON 文書
- Microsoft Excel ワークブック (
と '.xlsx
) ファイルは非推奨です。.xls
Microsoft Excelファイルに接続するには、データ・コネクタを使用する。 data-connectorはExcelファイルを'
ファイルに変換します。 詳しくは参照データを参照。.csv
- .dat ファイル
- すべての OPL データ構造がサポートされます。 例:
{Parameters = <100, 5000>; Hubs = { <"G">, <"H"> }; Spokes = { <"A", 360, 1080>, <"B", 400, 1150> };
- JSONドキュメントまたはMicrosoft Excelワークブック
- OPLモデルでは、
とtuples
だけを入力として使うことができます。tuple sets
タプル・フィールドでサポートされるタイプは、
、int
、またはfloat
です。string
入力値を OPL モデルにマップするには、以下のルールに従う必要があります。- OPL エレメントは、JSON プロパティーまたは Excel ワークシートと同じ名前である必要があります。
- タプル・セットには、JSON プロパティー配列またはワークシートによってデータを取り込むことができます。
- タプル要素には、JSONプロパティ・オブジェクト、または1行のエクセル・シートを入力することができます。
JSON フォーマットを OPL モデル統合に使用できるため、入力データを生成し、結果を構文解析することが容易になります。{ "Parameters": { "maxTrucks": 100, "maxVolume": 5000 }, "Hubs": [ { "name": "G" }, { "name": "H" } ], "Spokes": [ { "name": "A", "minDepTime": 360, "maxArrTime": 1080 }, { "name": "B", "minDepTime": 400, "maxArrTime": 1150 }, . . . }
.dat ファイルを使用する代わりに、Excel ファイルを使用できます。 このオプションは、IBM ILOG CPLEX Optimization Studio のように、
ファイルでExcelファイルを外部ソースとして指定する必要がある場合とは異なります。 Decision Optimization では、Excel ファイルはモデルに含まれていなければならず、.dat
ファイルから呼び出すことはできません。.dat
OPL入力としてタプルとタプルセットのみを使用するという制限は、データソースとの統合を容易にするためです。 例えば、SQLデータ・ソースにアクセスして、最小限の労力でデータ・ストリームすることができます。NoSQLデータ・ソースにアクセスして、データを自動的にテーブルに変換することができます。 必要であれば、最適化モデル開発者は、最適化中に他のデータ構造にデータを取り込むためにデータを再設計できますが、この操作が入力データまたは出力データに影響しないようにしてください。
出力データ
出力がテキストファイルの場合、目的関数と決定変数の値は構造化されていない形式で提供されます。
出力フォーマットがJSON、'
、エクセルの場合は、後処理ブロックの中でクライアントにエクスポートする内容を定義する必要があります。 後処理とは、.csv
ファイルの.mod
セクションに続くすべてのコードのことです。 したがって、JSON、'subject to
、またはエクセルの出力を定義するには、後処理でタプルまたはタプルセットを宣言しなければならない。.csv
ファイルの後処理ブロックに宣言しない出力要素を記述すると、出力データは生成されない。のようになる.mod
以下の例では、
とResult
の値と目的関数が出力ファイルに含まれます。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};