Как я могу отразить данные трехмерного параметра в OPL - PullRequest
0 голосов
/ 24 декабря 2018

Я хочу использовать параметр 3D в моем проекте LP.Однако я не могу правильно прочитать данные параметра.Можно ли получить данные с помощью Excel или записав значения параметров в матричной форме в файл .dat.Также могут быть полезны другие потенциальные решения.

float rt[B][P][Z]=...; //Response time of boat type b at port p to zone z

1 Ответ

0 голосов
/ 27 февраля 2019

хорошо, массив 3dim предназначен для всех комбинаций из 3-х индексов, а excel - это формат таблиц 2dim, поэтому, когда вы начали писать вещи, вы не можете напрямую читать массив 3dim из excel.Означает ли 3dim, что вам действительно нужны все комбинации или некоторые?Если позже, если B / P / Z существуют для некоторых комбинаций, то вы можете использовать формат кортежа для триплетов ... объявление типа кортежа выглядит примерно так:

tuple BPZ {int B; 
       float P; 
       float Z};

, тогда вы объявляетеданные с таким типом, как

{BPZ} myData = ...;

, а затем в Excel у вас есть 1 таблица со всеми триплетами.

если первая (все комбинации имеют данные), то другой способ состоит всделать каждый массив PZ 2dim / таблицу / матрицу в Excel B раз ... утомительно, но выполнимо, если вы не создаете данные вручную, но программно = в Python вы можете использовать openpyxl (https://openpyxl.readthedocs.io/en/stable/ - я использовалэто довольно неплохо / просто), а затем DOOPL, чтобы собрать OPL / Python вместе (https://developer.ibm.com/docloud/blog/2018/09/26/opl-and-python/ + https://pypi.org/project/doopl/)., вы можете использовать триплеты / кортежи в любом случае, когда присутствуют все комбинации, но затемэто может быть много значения, так что это зависит от размера B P Z, как вы хотите пойти ...

...