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 파일에 연결하려면 데이터 커넥터를 사용합니다. 데이터 커넥터는 Excel 파일을 '
.csv파일로 변환합니다. 자세한 내용은 참조 데이터를 참조하세요.
- .dat 파일
- 모든 OPL 데이터 구조가 지원됩니다. 예를 들면 다음과 같습니다.
{Parameters = <100, 5000>; Hubs = { <"G">, <"H"> }; Spokes = { <"A", 360, 1080>, <"B", 400, 1150> }; - JSON 문서 또는 Microsoft Excel 통합 문서
- OPL 모델에서는
tuples및tuple sets만 입력으로 사용할 수 있습니다.stringint튜플 필드에서 지원하는 유형은,float또는 입니다.입력 값을 OPL 모델에 매핑하려면 다음 규칙을 따라야 합니다:- OPL 요소의 이름은 JSON 속성이나 Excel 워크시트의 이름과 동일해야 합니다.
- 튜플 집합은 JSON 속성 배열이나 워크시트를 통해 데이터를 채울 수 있습니다.
- 튜플 요소는 JSON 속성 개체 또는 단일 행 Excel 시트로 채울 수 있습니다.
OPL 모델 통합에 JSON 형식을 사용하면 입력 데이터를 생성하고 결과를 파싱하기가 더 쉬워집니다.{ "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 파일을 외부 소스로 지정해야 하는
.dat파일과는 다른 옵션입니다. Decision Optimization에서 Excel 파일은 모델에 포함되어야 하며.dat파일에서 호출할 수 없습니다.
튜플 및 튜플 집합만 OPL 입력으로 사용하도록 제한한 것은 데이터 소스와의 통합을 용이하게 하기 위한 것입니다. 예를 들어, 최소한의 노력으로 SQL 데이터 원본에 액세스하고 데이터를 스트리밍할 수 있으며, NoSQL 데이터 원본에 액세스하고 데이터를 자동으로 테이블로 변환할 수 있습니다. 필요한 경우, 최적화 모델 개발자는 최적화 과정에서 다른 데이터 구조에 데이터를 채우기 위해 데이터를 재구성할 수 있지만, 이러한 조작은 입력 또는 출력 데이터에 영향을 미쳐서는 안 된다.
출력 데이터
출력이 텍스트 파일인 경우 목적 함수 및 의사 결정 변수의 값은 비정형 형식으로 제공됩니다.
출력 형식이 JSON, ' .csv' 또는 Excel인 경우 후처리 블록에서 클라이언트로 다시 내보낼 내용을 정의해야 합니다. 후처리는 subject to 파일에서 .mod 섹션 다음에 나오는 모든 코드를 말합니다. 따라서 JSON, ' .csv 또는 Excel 출력을 정의하려면 후처리에서 튜플 또는 튜플 집합을 선언해야 합니다.
If you 선언하지 마십시오 output elements in the post-processing block of the .mod file, 출력 데이터가 생성되지 않습니다.
다음 예제에서는 이러한 요소가 포스트 프로세싱에서 정의되었으므로 출력 파일에 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};