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 のように、
.dat
ファイルでExcelファイルを外部ソースとして指定する必要がある場合とは異なります。 Decision Optimization では、Excel ファイルはモデルに含まれていなければならず、.dat
ファイルから呼び出すことはできません。
OPL入力としてタプルとタプルセットのみを使用するという制限は、データソースとの統合を容易にするためです。 例えば、SQLデータ・ソースにアクセスして、最小限の労力でデータ・ストリームすることができます。NoSQLデータ・ソースにアクセスして、データを自動的にテーブルに変換することができます。 必要であれば、最適化モデル開発者は、最適化中に他のデータ構造にデータを取り込むためにデータを再設計できますが、この操作が入力データまたは出力データに影響しないようにしてください。
出力データ
出力がテキストファイルの場合、目的関数と決定変数の値は構造化されていない形式で提供されます。
出力フォーマットがJSON、'.csv
、エクセルの場合、後処理ブロックの中でクライアントにエクスポートするものを定義しなければならない。 後処理とは、.mod
ファイルのsubject to
セクションに続くすべてのコードのことです。 したがって、JSON、'.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};