Инициализация кортежей в ILOG OPL, импортированном из базы данных MS Access с использованием .NET - PullRequest
1 голос
/ 09 июля 2019

Я подключаю базу данных MS Access к модели OPL, используя представленное здесь решение .NET:

https://github.com/IBMDecisionOptimization/OPL-.net-custom-data-source

Это работает нормально, и я получаю все данные из моей базы данных через SQL. Однако я изо всех сил пытаюсь инициализировать кортежи. Мои операторы SQL выглядят следующим образом:

PName SELECT tblProdukte.PName FROM tblProdukte;
tName SELECT tblMaP.tName FROM tblMaP;
Demands SELECT tblProdukte.PName, tblMaP.tName, tblDemand.demDemand
FROM tblProdukte INNER JOIN (tblMaP INNER JOIN tblDemand ON tblMaP.tID = 
tblDemand.demTID) ON tblProdukte.pID = tblDemand.demPID
WHERE (((tblMaP.tName)>0)); 

В файле .mod я называю данные следующим образом:

{string} PName =...;
{int} tName =...;
tuple DemandType{
string PName;
int tName; 
int demDemand;
};
{DemandType} Demands=...;

Это решение работает. Но на самом деле я хочу реализовать что-то вроде

float Demands [PName][tName] =...;

Я испробовал несколько разных подходов, включая пример с нефтью и проблему транспортировки, предоставленную IBM. Как я могу добиться индексации именно таким образом?

Заранее спасибо!

1 Ответ

0 голосов
/ 09 июля 2019

Поскольку у вас уже есть что-то работающее, которое получает нужные данные, один из вариантов - просто преобразовать эти данные.Например, вы можете написать:

float DemandsAsTable[p in PName][t in tName] = sum(d in Demands : d.PName == p && d.tName == t) d.demDemand;

(обратите внимание, что каждая сумма будет составлять ровно один термин).

...